Поиск двух максимальных элементов в одномерном массиве - C (СИ)
Формулировка задачи:
Доброго времени суток!
Имеется целочисленный одномерный массив. Нужно найти 2 максимальных элемента в массиве и вывести их номера.
Решил проходить двумя циклами. При первом проходе -- поиск 1-го максимального. При втором -- соответственно, 2-го максимального, причем без учета 1-го максимального.
Однако, если массив будет, например,
max1=A[1]; max2=A[1]; for (i=1; i<=N; i++) { if (A[i]>=max1) { max1=A[i]; max1_num=i; } } for (i=1; i<=N; i++) { if (i!=max1_num) { if (A[i]>=max2) { max2=A[i]; max2_num=i; } } } printf("%d с номером [%d]\n%d с номером [%d]\n", max1, max1_num, max2, max2_num);
5 4 3 2 1
, то выводит только 1-й элемент. В общем, работает во всех случаях, кроме того, когда 1-й максимальный элемент стоит на 1-м месте. Спасибо!Решение задачи: «Поиск двух максимальных элементов в одномерном массиве»
textual
Листинг программы
#include <u.h> #include <libc.h> void main(void) { int i, i1, i2, n; int v[] = {5, 4, 3, 2, 1}; n = sizeof(v) / sizeof(int); if (v[0] > v[1]) { i1 = 0; i2 = 1; } else { i1 = 1; i2 = 0; } for (i = 2; i < n; i++) if (v[i] > v[i1]) { i2 = i1; i1 = i; } else if (v[i] > v[i2]) i2 = i; print("[%d] = %d\n[%d] = %d\n", i1, v[i1], i2, v[i2]); exits(0); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию main()
- Инициализируем переменные i, i1, i2, n
- Определяем массив v
- Вычисляем размер массива n
- Сравниваем первый и второй элементы массива v и меняем значения i1 и i2 если необходимо
- Проходим по массиву от 3-го элемента до последнего и находим максимальные элементы, записывая их в i1 и i2
- Выводим на экран значения i1 и i2
- Завершаем программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д