namespace java { class Program { static void Main(string[] args) { Console.Write("Введите N элементов = "); int n = int.Parse(Console.ReadLine()); string ar = ""; for (int i = 1; i <= n; i++) { ar += i.ToString(); }//наш строка 123.. Console.Write("Введите число столбцов = "); int n1 = int.Parse(Console.ReadLine()); int k = 0; int[,] mas = new int[k, n1]; bool t = true; bool t1 = false; while (t) { t = false; work(ar, ref k, ref n1, ref mas); bool t2 = true; while (t2) { t2 = false; gorizont(ref mas, k, n1, ref t2); verticale(ref mas, k, n1, ref t2); if (t2) { t1 = true; } } t = t1; t1 = false; makestring(mas, k, n1, ref ar); printmas(mas, k, n1); Console.WriteLine(); } } static void makestring(int[,] mas, int k, int n1, ref string a)//создание строки { a = ""; for (int i = 0; i < k; i++) { for (int i1 = 0; i1 < n1; i1++) { a += mas[i, i1]; } } } static void work(string ar, ref int k, ref int n1, ref int[,] mas) { string a = ar.Replace("0", "");//удаление 0 char[] mass = a.ToCharArray(); int n = a.Length; k = n % n1;//k - количество строк if (k != 0) k = n / n1 + 1; else k = n / n1; mas = new int[k, n1]; Array.Clear(mas, 0, mas.Length);//обнуление массива int l = 0; for (int i = 0; i < k; i++)//заполнение массива for (int i1 = 0; i1 < n1; i1++) { if (l < mass.Length) { mas[i, i1] = mass[l] - '0'; l++; } } } static void gorizont(ref int[,] mas, int k, int n1, ref bool t) { for (int i = 0; i < k; i++) { for (int i1 = 0; i1 < n1 - 1; i1++)//для первого элемента { int a = i1; int b = i1;//проверка правого элемента while (i1 < n1 - 1) { if (mas[i, i1+1] != 0) { if ((mas[i, b] == mas[i, i1 + 1]) || ((mas[i, b] + mas[i, i1 + 1]) == 10)) { mas[i, b] = 0; mas[i, i1 + 1] = 0; t = true; break; } else break; } else i1++; } while (a > 0)//проверка левого элемента { if (mas[i, a - 1] != 0) { if ((mas[i, b] == mas[i, a - 1]) || ((mas[i, b] + mas[i, a - 1]) == 10)) { mas[i, b] = 0; mas[i, a - 1] = 0; t = true; break; } else break; } else a--; } } } } static void verticale(ref int[,] mas, int k, int n1, ref bool t) { for (int i = 0; i < n1; i++) { for (int i1 = 0; i1 < k - 1; i1++)//для первого элемента { int a = i1; int b = i1;//проверка правого элемента while (i1 < k - 1) { if (mas[i1 + 1, i] != 0) { if ((mas[b, i] == mas[i1 + 1, i]) || ((mas[b,i] + mas[i1 + 1, i ]) == 10)) { mas[b, i] = 0; mas[ i1 + 1,i] = 0; t = true; break; } else break; } else i1++; } while (a > 0)//проверка левого элемента { if (mas[a - 1, i] != 0) { if ((mas[b, i] == mas[a - 1, i]) || ((mas[b,i ] + mas[a - 1, i]) == 10)) { mas[ b,i] = 0; mas[ a - 1,i] = 0; t = true; break; } else break; } else a--; } } } } static void printmas(int[,] mas, int k, int n1) { for (int i = 0; i < k; i++) { for (int i1 = 0; i1 < n1; i1++) { Console.Write(mas[i, i1] + " "); } Console.WriteLine(); } } } }