Индекс вне границ массива - 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];
                }
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.429 из 5
Похожие ответы