Добавление строки с максимумом после строк с делителями суммы первого и последнего элементов - 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();
 
        }

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы