Добавление строки с максимумом после строк с делителями суммы первого и последнего элементов - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте!) Есть такая задачка: Добавить(дублировать) строку, содержащую максимальный элемент после строк с элементами массива, которые будут делителями для суммы его первого и последнего элементов(элементы рассматривать по модулю).
тишина...
Что-то написал, прошу найти ошибку, выходит за границу массива, и не факт, что делает то, что нужно по условию...
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Linq;
  5. namespace ConsoleApplication8
  6. {
  7. class Program
  8. {
  9. static int m = 5;
  10. static int[,] a = new int[m, m];
  11. static void Main(string[] args)
  12. {
  13. int max = a[0, 0];
  14. int maxs = -1;
  15. Random rnd = new Random();
  16. for (int i = 0; i < m; i++)
  17. {
  18. for (int j = 0; j < m; j++)
  19. {
  20. a[i, j] = rnd.Next(-100, 100);
  21. if (a[i, j] > max)
  22. {
  23. max = a[i, j];
  24. maxs = i;
  25. }
  26. Console.Write("{0} ", a[i, j]);
  27. }
  28. Console.WriteLine();
  29. }
  30. Console.WriteLine("Maximum {0} in string {1}", max, maxs);
  31. int l = 0;
  32. for (int i = 0; i < m; i++)
  33. {
  34. for (int j = 0; j < m; j++)
  35. {
  36. if ((a[0, 0] + a[m-1, m-1]) % a[i, j] == 0)
  37. {
  38. l++;
  39. int[,] b = new int[m + l, m];
  40. for (int h = 0; h < i; h++)
  41. {
  42. for (int hh = 0; hh < m; h++)
  43. {
  44. b[h, hh-1] = a[h, hh-1];
  45. Console.Write("{0} ", b[h, hh]);
  46. }
  47. Console.WriteLine();
  48. }
  49. for (int hh = 0; hh < m; hh++)
  50. {
  51. b[i + 1, hh] = a[maxs, hh];
  52. Console.Write("{0} ", b[i+1, hh]);
  53. }
  54. Console.WriteLine();
  55. for (int h = i + 2; h < m; h++)
  56. {
  57. for (int hh = 0; hh < m; h++)
  58. {
  59. b[h, hh] = a[h - 2, hh];
  60. Console.Write("{0} ", b[h, hh]);
  61. }
  62. Console.WriteLine();
  63. }
  64. }
  65. }
  66. }
  67. Console.ReadKey();
  68. }
  69. }
  70. }

Решение задачи: «Добавление строки с максимумом после строк с делителями суммы первого и последнего элементов»

textual
Листинг программы
  1.  static void Main(string[] args)
  2.         {
  3.             int m = 5;
  4.             int[,] a = new int[m, m];// и зачем их глобально объявлять? тем паче что у вас весь код в Main...
  5.  
  6.  
  7.  
  8.             int max = a[0, 0];
  9.             int maxs = -1;
  10.  
  11.             // заполняем двумерный массив случайными числами попутно находим максимальный элемент.
  12.             Random rnd = new Random();
  13.             for (int i = 0; i < m; i++)
  14.             {
  15.                 for (int j = 0; j < m; j++)
  16.                 {
  17.                     a[i, j] = rnd.Next(-100, 100);
  18.                     if (Math.Abs(a[i, j] )> max)
  19.                     {
  20.                         max = Math.Abs(a[i, j]);
  21.                         maxs = i;
  22.                     }
  23.                     Console.Write("{0} ", a[i, j]);
  24.                 }
  25.                 Console.WriteLine();
  26.             }
  27.             Console.WriteLine("Maximum {0} in string {1}", max, maxs+1);
  28.  
  29.             //создаем масиив для хронения номеров строк, после которых нужно вставить строку(их будет не более 0-го измерения массива, т.е. m) и счетчик для подсчета количества строк.
  30.             // использовать  список вместо массива было бы гоаздо удобнее, но я так понимаю вы их еще не проходили.
  31.             int[] iElements = new int[m];
  32.             int count=0;
  33.             for (int i = 0; i < m; i++)
  34.             {
  35.                 for (int j = 0; j < m; j++)
  36.                 {
  37.                     if ((a[i, j] != 0) && ((Math.Abs(a[0, 0]) + Math.Abs(a[m - 1, m - 1])) % a[i, j] == 0))
  38.                     {
  39.                         iElements[count] = i;
  40.                         count++;
  41.                         break;// вот блин!!! И конечно же прерываем цикл проверки строки на случай если в строке несколько эллементов подходящих под условие:)
  42.                        
  43.                    
  44.                     }
  45.                 }
  46.             }
  47.  
  48.             //создаем и заполняем новый массив в который будут входить все строки старого массива и дублированные стрки максимума
  49.  
  50.             int[,] result = new int[m + count, m];
  51.             for (int i = 0,str=0; i < m ; i++)
  52.             {
  53.                 for (int j = 0; j < m; j++)
  54.                 {
  55.                     result[i+str, j] = a[i, j];
  56.                 }
  57.                 if (i == iElements[str]&&count!=0)
  58.                     {
  59.                         str++;
  60.                         for (int j = 0; j < m; j++)
  61.                             result[i+str, j] = a[maxs, j];
  62.                     }
  63.                
  64.             }
  65.  
  66.             //Выводим результат
  67.             for (int i = 0; i < m + count; i++)
  68.             {
  69.                 for (int j = 0; j < m; j++)
  70.                     Console.Write(result[i, j] + " ");
  71.                 Console.WriteLine();
  72.             }
  73.  
  74.                     Console.ReadLine();
  75.  
  76.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы