Добавление строки с максимумом после строк с делителями суммы первого и последнего элементов - C#
Формулировка задачи:
Здравствуйте!)
Есть такая задачка:
Добавить(дублировать) строку, содержащую максимальный элемент после строк с элементами массива, которые будут делителями для суммы его первого и последнего элементов(элементы рассматривать по модулю).
тишина...
Что-то написал, прошу найти ошибку, выходит за границу массива, и не факт, что делает то, что нужно по условию...
using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace ConsoleApplication8 { class Program { static int m = 5; static int[,] a = new int[m, m]; static void Main(string[] args) { int max = a[0, 0]; int maxs = -1; Random rnd = new Random(); for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { a[i, j] = rnd.Next(-100, 100); if (a[i, j] > max) { max = a[i, j]; maxs = i; } Console.Write("{0} ", a[i, j]); } Console.WriteLine(); } Console.WriteLine("Maximum {0} in string {1}", max, maxs); int l = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { if ((a[0, 0] + a[m-1, m-1]) % a[i, j] == 0) { l++; int[,] b = new int[m + l, m]; for (int h = 0; h < i; h++) { for (int hh = 0; hh < m; h++) { b[h, hh-1] = a[h, hh-1]; Console.Write("{0} ", b[h, hh]); } Console.WriteLine(); } for (int hh = 0; hh < m; hh++) { b[i + 1, hh] = a[maxs, hh]; Console.Write("{0} ", b[i+1, hh]); } Console.WriteLine(); for (int h = i + 2; h < m; h++) { for (int hh = 0; hh < m; h++) { b[h, hh] = a[h - 2, hh]; Console.Write("{0} ", b[h, hh]); } Console.WriteLine(); } } } } Console.ReadKey(); } } }
Решение задачи: «Добавление строки с максимумом после строк с делителями суммы первого и последнего элементов»
textual
Листинг программы
static void Main(string[] args) { int m = 5; int[,] a = new int[m, m];// и зачем их глобально объявлять? тем паче что у вас весь код в Main... int max = a[0, 0]; int maxs = -1; // заполняем двумерный массив случайными числами попутно находим максимальный элемент. Random rnd = new Random(); for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { a[i, j] = rnd.Next(-100, 100); if (Math.Abs(a[i, j] )> max) { max = Math.Abs(a[i, j]); maxs = i; } Console.Write("{0} ", a[i, j]); } Console.WriteLine(); } Console.WriteLine("Maximum {0} in string {1}", max, maxs+1); //создаем масиив для хронения номеров строк, после которых нужно вставить строку(их будет не более 0-го измерения массива, т.е. m) и счетчик для подсчета количества строк. // использовать список вместо массива было бы гоаздо удобнее, но я так понимаю вы их еще не проходили. int[] iElements = new int[m]; int count=0; for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { if ((a[i, j] != 0) && ((Math.Abs(a[0, 0]) + Math.Abs(a[m - 1, m - 1])) % a[i, j] == 0)) { iElements[count] = i; count++; break;// вот блин!!! И конечно же прерываем цикл проверки строки на случай если в строке несколько эллементов подходящих под условие:) } } } //создаем и заполняем новый массив в который будут входить все строки старого массива и дублированные стрки максимума int[,] result = new int[m + count, m]; for (int i = 0,str=0; i < m ; i++) { for (int j = 0; j < m; j++) { result[i+str, j] = a[i, j]; } if (i == iElements[str]&&count!=0) { str++; for (int j = 0; j < m; j++) result[i+str, j] = a[maxs, j]; } } //Выводим результат for (int i = 0; i < m + count; i++) { for (int j = 0; j < m; j++) Console.Write(result[i, j] + " "); Console.WriteLine(); } Console.ReadLine(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д