Определить второй по величине элемент двумерного массива - 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, чтобы указать, что программа успешно завершилась