Задача: вывести строку вида "a1 + a2 + ... + ak = S", где числа разделены одним или несколькими пробелами во входной строке.
Как решить по шагам:
- Считать входную строку и разбить её на числа, игнорируя любые промежуточные пробелы.
- Преобразовать разбитые части в целые числа и посчитать их сумму S.
- Сформировать левую часть строки как последовательность чисел, разделённых " + ".
- Вывести полученное выражение в формате: левая часть + пробелы вокруг знаков, затем " = ", затем сумму.
Пример:
- Вход: 1 2 3 4
- Числа: [1, 2, 3, 4]
- Сумма: 10
- Вывод: 1 + 2 + 3 + 4 = 10
Алгоритм на Python (пошагово):
- Читаем строку и разбиваем по whitespace: numbers = list(map(int, line.split()))
- Вычисляем сумму: total = sum(numbers)
- Формируем левую часть: lhs = ' + '.join(map(str, numbers))
- Выводим: print(f"{lhs} = {total}")
Пример реализации на Python:
- import sys
- line = sys.stdin.readline().strip()
- numbers = list(map(int, line.split()))
- total = sum(numbers)
- lhs = ' + '.join(map(str, numbers))
- print(f"{lhs} = {total}")
Дополнительные варианты реализации (если нужно на другом языке):
- C++:
- Считать одну строку с getline, разбить её через istringstream.
- Вектор
nums; последовательность a[i]. - Промерить сумму и вывести: для i от 0 до n-1: если i > 0 выводить " + ", затем выводить число; затем " = " и сумму.
Пример на C++: #include <bits/stdc++.h> using namespace std;
int main() { ios::sync_with_stdio(false); cin.tie(nullptr);
string line;
if (!getline(cin, line)) return 0;
istringstream iss(line);
vector<long long> a;
long long x;
while (iss >> x) a.push_back(x);
long long sum = 0;
for (auto v : a) sum += v;
for (size_t i = 0; i < a.size(); ++i) {
if (i) cout << " + ";
cout << a[i];
}
cout << " = " << sum;
return 0;
}
Логика одинакова для любых чисел: корректная обработка нескольких пробелов, затем вывод в требуемом формате.
Если нужно, могу адаптировать решение под конкретный язык или формат ввода/вывода.