Предмет: Информатика, автор: stellka99

С++.
Дано количество элементов n, и сам массив а[i]. Нужно найти 2 максимальных числа и вывести их сумму.

например n=5, a[i]= 1 2 3 4 5, sum=4+5=9
n=5, a[i]= 1 2 3 4 4, sum=4+4=8.
помогите исправить код)

Приложения:

Giammy: По вашему примеру видно что должно быть именно так как я сказал
Giammy: n=5, a[i]= 1 2 3 4 4, sum=4+4=8
stellka99: это ведь и есть 2 максимума, просто одинаковых
Giammy: Ну вот, понял, вы не против если немного по-своему напишу?
stellka99: а так как я ввела при поиске второго максимума a[i]
stellka99: да, только с объяснениями если можно)
Giammy: Хорошо.
Giammy: А есть гарантии на то что должно быть в массиве как минимум 2 элемента?
stellka99: да, как минимум 2
Giammy: Хорошо.

Ответы

Автор ответа: Giammy
3

#include <iostream>

using namespace std;

int main() {

int n,max0=0,ind=0,max1= -2147483647;

/* n - размер массива, max0 - первый максимальный элемент, ind - индекс первого максимального , max1 - второй максимальный элемент */

cin >> n;

int *a = new int[n]; // указатель на динамический массив типа int и размера n.

for (int i = 0; i < n; i++)

 if ((cin >> a[i], a[i]) > max0 || i == 0) {  

 /*(cin >> a[i], a[i]) - присваивание число массиву и сразу же проверка его на максимум. */

 /* Обязательное условие i == 0, тк max0 может быть и отрицательным, поэтому в любом случае  при первой итерации максимумом будет первый элемент.*/

  max0 = a[i];

  ind = i;

 }

for (int i = 0; i < n; i++)

 if (i != ind && a[i] > max1) max1 = a[i];  

/* поиск второго максимума, обязательное условие (i != ind) */

cout << max0 + max1;

delete[] a; // удаление из памяти массив a

   return 0;

}


Giammy: Код создан для школьников, где учитель строго проверяет по одному типу
Giammy: То есть вы предлагаете в цикл пихать префиксный инкремент?
Giammy: В случае i++ сперва выполняется тело цикла, а потом изменяется значение счётчика, мне это и нужно было.
Похожие вопросы
Предмет: Алгебра, автор: lilataran618