Задача A278
Условие задачи
Даны натуральные числа [latex]n_{1},\dots,n_{m}[/latex], действительные числа [latex]x_{1},\dots,x_{m}[/latex]. Вычислить [latex]\frac{n_{1}\cdot x_{1}+\dots+n_{m}\cdot x_{m}}{n_{1}+\dots+n_{m}}[/latex].
Тестирование
№ | Входные данные | Выходные данные |
1. | 1 2 4 -1 | -0.4 |
2. | 1 2 3 4 5 0.6 | 1.88889 |
3. | 5 -2 1 0.2 3 -3 2 0 | -1.70909 |
4. | 10 3.3 4 0.4 6 0.01 8 1 1 8 | 1.7469 |
5. | 3 -0.5 2 -0.4 1 -0.3 5 32 11 5 20 -1 | 4.58095 |
Реализация (класс vector)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <iostream> #include <vector> using namespace std; int main() { vector<int> n; vector<double> x; int a, sum2 = 0; double b, res = 0, sum1 = 0; while (cin >> a >> b) { n.push_back(a); x.push_back(b); } for (int i=0; i < x.size(); i++) { sum1 += n[i] * x[i]; sum2 += n[i]; res = sum1 / sum2; } cout << res << endl; return 0; } |
Алгоритм решения (класс vector)
Считываем все натуральные числа до конца входного потока и записываем их в вектор [latex]n[/latex]. Аналогично, считываем все действительные числа до конца входного потока и записываем их в вектор [latex]x[/latex].
- Вычисляем значение выражения [latex]n_1\cdot x_1+\dots+n_m\cdot x_m[/latex], накапливая сумму sum1.
- Вычисляем значение выражения [latex]n_1+\dots+n_m[/latex], накапливая сумму sum2.
- Находим результат res от деления sum1 на sum2.
Реализация (потоковая обработка)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <cmath> using namespace std; int main() { int member1, sum2 = 0; double member2, res = 0, sum1 = 0; while (cin >> member1 >> member2) { if (member1=='e') break; sum1 += member1 * member2; sum2 += member1; } res = sum1 / sum2; cout<< res << endl; return 0; } |
Алгоритм решения (потоковая обработка)
Считываем все натуральные числа до конца входного потока и записываем их в переменную
member1. Аналогично, считываем все действительные числа до конца входного потока и записываем их в переменную
member2.
Пока вводятся данные:
- Вычисляем значение выражения [latex]n_1\cdot x_1+\dots+n_m\cdot x_m[/latex], накапливая сумму sum1.
- Вычисляем значение выражения [latex]n_1+\dots+n_m[/latex], накапливая сумму sum2.
- Находим результат res от деления sum1 на sum2.
Для запроса на выполнение следует перейти по ссылке (класс vector).
Для запроса на выполнение следует перейти по ссылке (потоковая обработка).
Это хорошее решение на тему vector.
А помните, я говорил, что некоторые задания этого раздела предполагают ещё одно, более простое решение — на потоковую обработку. Здесь такое возможно?
Да, возможно. Добавила решение на потоковую обработку.
Всё очень хорошо, но как попало внутрь цикла вычисление res = sum1 / sum2;?
Спасибо за замечание, Игорь Евгеньевич, исправила.
Хорошо получилось, молодец.