Задача
Задана последовательность вещественных чисел. Найти среднее арифметическое положительных чисел.
Входные данные
В первой строке задано количество чисел $n$ ($0 < n ≤ 100$). В следующей строке заданы $n$ действительных чисел, значения которых не превосходят по модулю $100$.
Выходные данные
Вывести среднее арифметическое положительных чисел с двумя десятичными знаками. В случае отсутствия положительных чисел вывести сообщение $Not$ $Found$.
Тесты
Входные данные | Выходные данные |
3 5.2 -2 4 |
4.60 |
3 -5.2 -2 -4 |
Not Found |
5 16 -78 56 1 -3 |
24.33 |
1 17.33 |
17.33 |
1 -17.33 |
Not Found |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> #include <iomanip> using namespace std; int main() { int n, k = 0; // n - общее кол-во чисел в потоке; k - кол-во положительных чисел; double x; // x - число, считываемое с потока; double s = 0; // s - сумма положительных чисел; cin >> n; for (int i = 0; i < n; i++) { cin >> x; if (x > 0) { s += x; k++; } } if (s > 0) cout << fixed << setprecision(2) << s / k; else cout << "Not Found"; return 0; } |
Решение
В начале читаем из потока общее количество чисел n . Затем с помощью цикла остальные числа, одновременно проверяя положительные ли они. Если число положительное, то прибавляем его к общей сумме и увеличиваем счетчик k++ . В конце s!=0 означает, что в потоке есть хотя бы одно положительное число — тогда мы высчитываем и выводим $\frac{s}{k}$ с двумя знаками после запятой. В противном случае — $Not$ $Found$.
Код программы (Тернарная операция)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <iomanip> using namespace std; int main() { int n, k = 0; double x, s = 0; cin >> n; for (int i = 0; i < n; i++) { cin >> x; if (x > 0) { s += x; k++; } } s = int(s / k * 100 + 0.5) / 100.0; string str = to_string(s); str.erase(str.end() - 4, str.end()); cout << ((s > 0) ? str : "Not Found"); return 0; } |
Решение
Для вывода ответа с помощью тернарной операции необходимо, чтобы выходные данные были одного типа. Используем метод to_string, предварительно округлив $s$ до двух знаков после запятой. Так как при использовании метода double переводится с шестью знаками после запятой, то используем erase, чтобы удалить лишние четыре.
Ссылки
Логическая переменная там и правда не нужна. Объявление переменных тоже исправила.
Лексику и название исправила. Про тернарную операцию — спасибо, буду знать.
Про тернарную операцию я написал не просто, чтобы Вы знали. Просто, чтобы знали я на лекции говорил. Здесь нужно прямо взять и исправить код.
И отступы сделать как положено.
Все исправила, спасибо за замечания.
Ладно, давайте съэкономим немного времени. Просто замените в первом коде строки на эти
Исправлено.