Индекс вне границ массива - C# (207026)
Формулировка задачи:
Поправьте, пожалуйста. Хотел с паскале перенести, да где-то с индексами напутал. Как можно видеть, код на паскале - генерация сочетаний из n по k. Я хотел вынести генерацию сочетаний в функцию.
static void GGW(int[] a, int n, int k)
{
int[] x = new int[100], min = new int[100], max = new int[100];
for (int j = 1; j <= k - 1; j++)
{
max[j] = n - j + 1;
min[j] = k - j + 1;
x[j] = min[j];
}
int i = 0, r = 0;
while (i <= k)
{
for (int j = k; j <= 1; j--) x[j] = a[j]; //Console.Write(x[j] + " "); Console.WriteLine();
r = r + 1; i = 0;
while ((i <= k) && (x[i] == max[i])) i = i + 1;
if (i <= k) x[i] = x[i] + 1;
for (int j = i - 1; j <= 1; j--)
{
min[j] = x[j + 1] + 1;
x[j] = min[j];
}
}
}const n=5; k=3; n1=100; type t=array[1..n1] of integer; var x,min,max : t; i,j,r:integer; begin // задаются начальные значения max,min,x for j:=1 to k do begin max[j]:=n-j+1; min[j]:=k-j+1; x[j]:=min[j] end; while i<=k do begin for j:=k downto 1 do write(x[j], ' '); writeln; r:=r+1; i:=1; while (i<=k) and (x[i]=max[i]) do i:=i+1; if i<=k then x[i]:=x[i]+1; for j:=i-1 downto 1 do begin min[j]:= x[j+1]+1; x[j]:=min[j] end end; end.
Решение задачи: «Индекс вне границ массива»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
const int n = 5, k = 3, n1 = 100;
int[] x = new int[n1];
int[] min = new int[n1];
int[] max = new int[n1];
int i, j, r;
for (j = 0; j < k; j++)
{
max[j] = n - j + 1;
min[j] = k - j + 1;
}
i = 0; r = 0; // у вас меременные не получают никакого значения. допустим это ноль.
while (i <= k)
{
for (j = k; j >= 0; j--)
{
Console.Write(x[j] + " ");
}
Console.WriteLine();
r++;
while (i <= k && x[i]==max[i])
{
i++;
}
for (j = i - 1; j >= 0; j--)
{
min[j] = x[j + 1] + 1;
x[j] = min[j];
}
}
}
}
}