Advertisement
AndreyKlipikov

Practic

Jul 8th, 2015
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.09 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace ConsoleApplication1
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             Console.WriteLine("Введите массив:");
  13.             string input = "", tmp = ""; // input для всего массива, tmp для каждой считываемой строчки
  14.             int[,] data = null;
  15.  
  16.             do
  17.             {
  18.                 tmp = Console.ReadLine();
  19.  
  20.                 if (tmp.Trim() != "#")
  21.                     input += tmp + "!"; // Складываем все строчки, прибавляя в конец каждой !
  22.  
  23.             } while (tmp.Trim() != "#"); // Считываем строчки пока одна из не равна #
  24.  
  25.             string[] rows = input.Split(new Char[] {'!'}, StringSplitOptions.RemoveEmptyEntries); // Разбиваем на строки через символ !
  26.             int countRow = rows.Length, sum = 0, countCol = rows[0].Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length; // считаем количество строк, переменная для количества единичек, и количество столбцов
  27.  
  28.             for (int i = 0; i < countRow; i++) // Пробегаемся по строкам
  29.             {
  30.                 string[] cols = rows[i].Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  31.  
  32.                 for (int j = 0; j < Math.Min(cols.Length, rows.Length); j++)
  33.                     sum += Convert.ToInt32(cols[j]) * -1; // и суммируем количество единичек, которое нам понадобится добавить
  34.             }
  35.  
  36.             data = new int[countRow + Convert.ToInt32(Math.Ceiling(sum / Convert.ToDecimal(countCol))), countCol]; // Считаем количество столбцов как и в изначальном, а количество строк как "количество изначальных" + округленный результат деления количества единичек на количество столбцов
  37.            
  38.             for (int i = 0; i < countRow; i++) // Цикл для заполнения массива из строки
  39.             {
  40.                 string[] cols = rows[i].Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  41.  
  42.                 for (int j = 0; j < Math.Min(cols.Length, rows.Length); j++)
  43.                     data[i, j] = Convert.ToInt32(cols[j]);
  44.             }
  45.  
  46.             Console.WriteLine("Исходный массив:");
  47.  
  48.             for (int i = 0; i < countRow; i++) // Выводим изначальный массив
  49.             {
  50.                 for (int j = 0; j < countCol; j++)
  51.                     Console.Write(data[i, j].ToString().PadLeft(3) + " ");
  52.  
  53.                 Console.WriteLine();
  54.             }
  55.  
  56.             Console.WriteLine("Количество единиц: {0}", sum); // Количество требуемых единичек
  57.  
  58.             for (int i = countRow; i < data.GetLength(0); i++) // Теперь циклом после основного массива дозаписываем единицы
  59.                 for (int j = 0; j < data.GetLength(1) && sum-- > 0; j++) // пока количество оставшихся единичек положительно
  60.                     data[i, j] = 1;
  61.  
  62.             Console.WriteLine("Конечный массив:");
  63.  
  64.             for (int i = 0; i < data.GetLength(0); i++)
  65.             {
  66.                 for (int j = 0; j < data.GetLength(1); j++)
  67.                     Console.Write((data[i, j] == 0 ? "" : data[i, j].ToString().PadLeft(3)) + " "); // Массив интовский, по умолчанию нули, следовательно небольшое условие, что выводим только единички, а нули заменяем пробелом
  68.  
  69.                 Console.WriteLine();
  70.             }
  71.  
  72.             Console.ReadLine();
  73.         }
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement