В двумерном массиве найти наибольший элемент тех строк, где все элементы различны - C (СИ)

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

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

Дан двумерный массив. Найти наибольший элемент тех строк, в которых все элементы различны. все дело происходит в функции ras (41-80) Все нормально считает, но вот что брать за max??? Если брать просто первый элемент всего массива, то если в первой строке есть повторы, то он все равно останется самым большим элементов, что неверно по условию. Если брать 0 - то если массив будет состоять только из отрицательных элементов, то опять же, 0 будет останется максимальным, если даже его не было в массиве. Как поступить в данном случае???
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. //int a[10][10];
  4. //int n, m;
  5. void vvod(int a[10][10], int *, int *);
  6. int ras(int a[10][10], int *, int *);
  7. void vivod(int);
  8. int main(void)
  9. {
  10. int k, n, m, a[10][10];
  11. vvod(a, &n, &m);
  12. k = ras(a, &n, &m);
  13. vivod(k);
  14. getch();
  15. return 0;
  16. }
  17. void vvod (int a[10][10], int *n, int *m)
  18. {
  19. int i,j;
  20. *n = 0;
  21. *m = 0;
  22. printf ("Vvedite razmernost massiva (n,m):\n");
  23. scanf ("%d %d", n, m);
  24. /*
  25. pochemy esli vishe postavit & - &n , &m
  26. to ne budet rabotat????
  27. */
  28. printf ("Vvedite elementi massiva:\n");
  29. for (i=0; i<*n; i++) {
  30. for (j=0; j<*m; j++) {
  31. scanf("%d", &a[i][j]);
  32. }
  33. }
  34. }
  35. int ras(int a[10][10], int *n, int *m)
  36. {
  37. int i, j, jj, p, max, max_prom, p2;
  38. max = 0;
  39. for (i=0; i<*n; i++)
  40. {
  41. p = 0; // schetchik povtor. chisel
  42. p2 = 0; //metka, esli v stoke est povtori
  43. max_prom = a[i][0];
  44. for (j=0; j<*m; j++)
  45. {
  46. for (jj = 0; jj<*m; jj++)
  47. {
  48. if (a[i][j] == a[i][jj]) p++;
  49. if (a[i][j] > max_prom) max_prom = a[i][j];
  50. }
  51. if (p == 1) //esli vstretilsya tolko etot element napr a[1][1] == a[1][1]
  52. p = 0;
  53.  
  54. if (p > 1)
  55. {
  56. p2 = 1;
  57. break; //esli vstretilos bolshe, napr. : a[1][1] = a[1][3]
  58. }
  59. }
  60. if (p2 != 1)
  61. {
  62. if (max_prom > max)
  63. max = max_prom;
  64. }
  65.  
  66. }
  67. return max;
  68. }
  69. void vivod (int a)
  70. {
  71. printf("Max = %d", a);
  72. }
пока решил данную проблему тем, что за переменной max (44 строка) присвоил самое маленькое значение для int = -2147483648 тогда все работает верно. Но как обойтись без этого?

Решение задачи: «В двумерном массиве найти наибольший элемент тех строк, где все элементы различны»

textual
Листинг программы
  1.     int max_line, max_total, flagFirstLine = 0, flag = 0;
  2.     for(i = 0; i < N; i++){
  3.         for(j = 0; j < M; j++){
  4.             if(not_repeat(A[i])){//not_repeat-функция возвращающая 1 если нет повторов в строке
  5.                 flag = 1;
  6.                 if(!j)
  7.                     max_line = A[i][j];
  8.                 if(A[i][j] > max_line)
  9.                     max_line = A[i][j];
  10.             }
  11.         }
  12.         if(!flagFirstLine && flag){
  13.             max_total = max_line;
  14.             flagFirstLine = 1;
  15.         }
  16.         if(max_line > max_total)
  17.             max_total = max_line;
  18.     }

Объяснение кода листинга программы

  1. В коде используется два вложенных цикла for для перебора всех элементов двумерного массива A.
  2. Переменная flag инициализируется как 0. Она будет использоваться для отслеживания первой строки, в которой все элементы различны.
  3. Переменная flagFirstLine инициализируется как 0. Она будет использоваться для отслеживания первой строки, в которой все элементы различны.
  4. Переменная max_line инициализируется как 0. Она будет использоваться для отслеживания максимального элемента в текущей строке.
  5. Переменная max_total инициализируется как 0. Она будет использоваться для отслеживания наибольшего элемента во всем массиве.
  6. Если функция not_repeat возвращает 1, это означает, что текущий элемент не повторяется в строке.
  7. Если текущий элемент больше max_line, то он становится новым max_line.
  8. Если flag равно 1 и это первая итерация (т.е. flagFirstLine равно 0), то max_total присваивается значение max_line.
  9. Если max_line больше max_total, то max_total присваивается значение max_line.
  10. По завершении циклов, max_total будет содержать наибольшее значение во всем массиве.

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


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

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

10   голосов , оценка 4.2 из 5

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

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

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