Задача. Даны целые числа [latex]a_{1},\ldots, a_{n}[/latex]. Наименьший член последовательности [latex]a_{1}, \ldots, a_{n}[/latex] заменить целой частью среднего арифметического всех членов, остальные члены оставить без изменения. Если в последовательности несколько членов со значением min [latex](a_{1}, \ldots, a_{n})[/latex], то заменить последний по порядку.
Тесты
Test | Input | Output |
1 | 2 4 8 16 2 4 | 2 4 8 16 6 4 |
2 | 1 1 1 1 | 1 1 1 1 |
3 | -5 5 -10 10 -10 5 5 | -5 5 -10 10 0 5 5 |
4 | 2 6 9 -4 -5 7 13 | 2 6 9 -4 4 7 13 |
5 | 0 0 0 0 0 1 | 0 0 0 0 0 1 |
6 | 0 1 0 0 2 0 25 | 0 1 0 0 2 4 25 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include<iostream> #include<cmath> #include<vector> using namespace std; int main() { vector<int>a; int el; //supporting variable for saving input values while(cin >> el) { a.push_back(el); //adding value to the vector } int min = a[0]; // minimal value int num = 0; // number of the minimal value double sum = 0; for(int i=0; i<a.size(); i++) { if(a[i]<=min) //finding the number of the minimal value { min = a[i]; num = i; } sum += a[i]; } int average = floor(sum/a.size()); //calculing the average of vector elements a[num] = average; //replacing minimal value by the average for(int i = 0; i < a.size(); i++) { cout << a[i] << " "; } return 0; } |
Алгоритм
Мы считываем все числа до конца входного потока и добавляем их в вектор. В полученной последовательности мы находим минимальный элемент, а также сумму всех членов. Затем мы вычисляем их среднее арифметическое, и извлекаем целую часть. Полученное число мы помещаем в вектор на место последнего минимального элемента, после чего выводим результат.
Нужно внести изменения в условие задачи так, чтобы вводилось не 20 элементов, а произвольное количество.
Есть довольно серьёзная логическая ошибка. Вы ищите величину минимального элемента, а не его номер. Из-за этого у Вас появляется еще один цикл с поиском последнего по порядку элемента с найденным минимальным значением.
Спасибо за замечание, исправила.
Молодец, зачтено.
А с какой целью Вы завели переменную average? Вычисленное значение используется только один раз. Случайно или есть какие-то мысли?
Кстати, многоточие кодируют так \ldots или так \cdots. В зависимости от контекста.
Переменная average получилась случайно. Я просто перевела в гугле, как будет «среднее арифметическое». А за многоточие большое спасибо.