Определить второй по величине элемент двумерного массива - C (СИ)
Формулировка задачи:
Доброго дня!
По условию задачи надо определить второй по величине элемент двумерного массива и вывести на экран номера строк и количество данных элементов в этих строках.
вот что получилось:
Проблема в том, что программа иногда выводит максимальный элемент вместо второго по величине...
подскажите где ошибка.
добавить выделенные скобки, то вроде как ошибка появляется реже, но все равно проскакивает
int main() { system ("chcp 1251"); system ("cls"); int a[10][10],n,m,i,j; printf("введите количество строк от 1 до 10\n"); scanf("%d",&n); while(n<1||n>10) {printf("введено неверное значение, пробуй еще\n"); scanf("%d",&n); } printf("введите количество элементов в каждой строке от 1 до 10\n"); scanf("%d",&m); while(m<1||m>10) {printf("введено неверное значение, пробуй еще\n"); scanf("%d",&m); } srand(time(0)); for(i=0;i<n;i++) { for(j=0;j<m;j++) { a[i][j]=rand()%30+1; } } for(i=0;i<n;i++) { for(j=0;j<m;j++) { printf("%4d",a[i][j]); } printf("\n"); } int max=a[0][0],max2=a[0][0]; for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(a[i][j]>max) { max=a[i][j]; } if(a[i][j]>max2&&a[i][j]<max) { max2=a[i][j]; } } } printf("second max element =%d\n",max2); int sum[i]; for(i=0;i<n;i++) { sum[i]=0; for(j=0;j<m;j++) { if(a[i][j]==max2) {sum[i]++; } } if(sum[i]>0) printf("количество вторых по величине элементов %d строки равно %d\n",i+1,sum[i]); } return 0; }
Вроде как если в условии:
if( ( a[i][j]>max2 ) && ( a[i][j]<max ) ) { max2=a[i][j]; }
Решение задачи: «Определить второй по величине элемент двумерного массива»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <time.h> #define n 5 #define m 4 //вывести на экран второй наибольший элемент массива int main() { bool flag = false; int i, j, max, max2, a[n][m]; srand(time(0)); for(i = 0; i < n; i++){ for(j = 0; j < m; j++){ printf("%3d", a[i][j] = rand() % 150 - 60); if(i == 0 && j == 0) max = max2 = a[0][0]; if(!flag){ if(a[i][j] < max){ max2 = a[i][j]; flag = true; } } if(a[i][j] > max){ max2 = max; max = a[i][j]; } if(a[i][j] > max2 && a[i][j] < max) max2 = a[i][j]; } } printf("\n%d\n", max2); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с C
- Задаем размерность двумерного массива с помощью макросов
- Инициализируем переменные, в том числе флаг, который указывает, найден ли уже второй максимальный элемент
- Заполняем массив случайными числами с помощью функции rand() и операции модуля %
- В цикле находим второй максимальный элемент, сравнивая текущий элемент с уже найденными максимальными значениями
- Выводим на экран второй максимальный элемент массива
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д