Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace ConsoleApplication1
- {
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("Введите массив:");
- string input = "", tmp = ""; // input для всего массива, tmp для каждой считываемой строчки
- int[,] data = null;
- do
- {
- tmp = Console.ReadLine();
- if (tmp.Trim() != "#")
- input += tmp + "!"; // Складываем все строчки, прибавляя в конец каждой !
- } while (tmp.Trim() != "#"); // Считываем строчки пока одна из не равна #
- string[] rows = input.Split(new Char[] {'!'}, StringSplitOptions.RemoveEmptyEntries); // Разбиваем на строки через символ !
- int countRow = rows.Length, sum = 0, countCol = rows[0].Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length; // считаем количество строк, переменная для количества единичек, и количество столбцов
- for (int i = 0; i < countRow; i++) // Пробегаемся по строкам
- {
- string[] cols = rows[i].Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
- for (int j = 0; j < Math.Min(cols.Length, rows.Length); j++)
- sum += Convert.ToInt32(cols[j]) * -1; // и суммируем количество единичек, которое нам понадобится добавить
- }
- data = new int[countRow + Convert.ToInt32(Math.Ceiling(sum / Convert.ToDecimal(countCol))), countCol]; // Считаем количество столбцов как и в изначальном, а количество строк как "количество изначальных" + округленный результат деления количества единичек на количество столбцов
- for (int i = 0; i < countRow; i++) // Цикл для заполнения массива из строки
- {
- string[] cols = rows[i].Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
- for (int j = 0; j < Math.Min(cols.Length, rows.Length); j++)
- data[i, j] = Convert.ToInt32(cols[j]);
- }
- Console.WriteLine("Исходный массив:");
- for (int i = 0; i < countRow; i++) // Выводим изначальный массив
- {
- for (int j = 0; j < countCol; j++)
- Console.Write(data[i, j].ToString().PadLeft(3) + " ");
- Console.WriteLine();
- }
- Console.WriteLine("Количество единиц: {0}", sum); // Количество требуемых единичек
- for (int i = countRow; i < data.GetLength(0); i++) // Теперь циклом после основного массива дозаписываем единицы
- for (int j = 0; j < data.GetLength(1) && sum-- > 0; j++) // пока количество оставшихся единичек положительно
- data[i, j] = 1;
- Console.WriteLine("Конечный массив:");
- for (int i = 0; i < data.GetLength(0); i++)
- {
- for (int j = 0; j < data.GetLength(1); j++)
- Console.Write((data[i, j] == 0 ? "" : data[i, j].ToString().PadLeft(3)) + " "); // Массив интовский, по умолчанию нули, следовательно небольшое условие, что выводим только единички, а нули заменяем пробелом
- Console.WriteLine();
- }
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement