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

Помогите решить задачу на C++
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные
целые значения. Напишите программу, которая находит и выводит номера двух элементов массива, сумма которых минимальна.


shibgena: Не совсем ясно, что имеется ввиду под "двумя элементами, сумма которых минимальна", то есть просто найти в массиве два самых маленьких элемента тогда зачем заморачиваться с суммой? или нужно искать два подряд идущих элемента?
dneznqy: два подряд идущих минимальных элемента ,я так понял, а причем тут сумма,сам не понял
shibgena: Ну тогда все ясно, сумма здесь уместна, так как допустим один элемент 1, а другой 1000, сумма будет 1001, а в другом месте например 200 и 200 и сумма будет 400, хотя слагаемые далеко не самые маленькие. И еще вопрос: для ввода и вывода в консоль вы используете cin << "Privet"; или printf("Privet"); ?
dneznqy: cin << "Privet"

Ответы

Автор ответа: shibgena
0

Ответ:

Объяснение:

// Example program

#include <iostream>

#include <string>

int main()

{

   int k[30];

   for(int i = 0; i < 30; i ++) //заполняем случайными числами

       k[i] = rand();

   int min_sum = 999999999;

   int num1, num2;

   for(int i = 0; i < (30 - 1); i ++) //цикл поиска, i меняется от начала

                                      //до предпоследнего элемента, чтобы не выйти

                                      //за пределы при обращении к i + 1 элементу

   {

       int sum = k[i] + k[i+1];//очередная сумма

       if(sum < min_sum) //сравниваем ее с текущим минимумом

       {//если она меньше, то

           min_sum = sum;//обновляем текущую сумму

           num1 = i; num2 = i + 1;//обновляем номер

       }

   }

   //на выходе из цикла в min_sum и num1 и num2 имеем самые минимальные номера

   std::cout << "min_sum = " << min_sum << " nomer1 = " << num1 <<" nomer2 = " << num2;

}

Приложения:

shibgena: int min_sum = 999999999; // изначально сумма равна большому числу, чтобы при первом проходе цикла (в первой паре элементов) сработало условие минимума и в min_sum записалась сумма первых двух элементов.
dneznqy: а если в min_sum записать другое число, что-то изменится?
shibgena: да, если число будет маленьким, то возможно что условие минимума никогда не сработает, и данные будут не корректными.
shibgena: Чтобы все точно работало лучше сделать так: int min_sum = k[0] + k[1]; num1 = 0; num2 = 1;
shibgena: то есть изначально поместить в переменные сумму и номера первой пары
dneznqy: а у тебя это все работает при запуске?
shibgena: Ну вообще запускается. Я сейчас проверил, работает не совсем правильно. Внес кое-какие исправления. Я сделал так чтобы случайное число было от 1 до 1000, добавил вывод исходного массива. Сейчас прикреплю второе фото с кодом.
shibgena: Прикрепил фото, вот результат работы программы
shibgena: 383
886
777
915
793
335
386
492
649
421
362
27
690
59
763
926
540
426
172
736
211
368
567
429
782
530
862
123
67
135
min_sum = 190 nomer1 = 27 nomer2 = 28
Похожие вопросы
Предмет: Русский язык, автор: VladislavNOV07
Предмет: Алгебра, автор: Азизаа99