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();
}
}
}
}