using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace java1
{
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;
while (t)
{
t = false;
work(ar, ref k, ref n1, ref mas);
gorizont(ref mas, k, n1, ref t);
verticale(ref mas, k, n1, ref t);
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)
{
t = false;
for (int i = 0; i < k; i++)
{
for (int i1 = 0; i1 < n1-1; i1++)
{
if (mas[i,i1+1]!=0)
{
if ((mas[i, i1] == mas[i, i1 + 1]) || ((mas[i, i1] + mas[i, i1 + 1]) == 10))
{
mas[i, i1] = 0;
mas[i, i1 + 1] = 0;
i1 = -1;
t = true;
}
}
else i1++;
}
}
//if (t == true)
// verticale(ref mas, k, n1, ref t);
}
static void verticale(ref int[,] mas, int k, int n1, ref bool t)
{
//t = false;
for (int i = 0; i < n1; i++)
{
for (int i1 = 0; i1 < k-1; i1++)
{
if (mas[i1+1, i] != 0)
{
if ((mas[i1, i] == mas[i1 + 1,i ]) || ((mas[i1, i] + mas[i1 + 1, i]) == 10))
{
mas[i1, i] = 0;
mas[i1+1, i] = 0;
i1 = -1;
t = true;
}
}
else i1++;
}
}
//if (t == true)
//gorizont(ref mas,k,n1, ref t);
}
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();
}
}
}
}