Задача
Даны действительные числа [latex]a_{1},a_{2}[/latex] … Известно, что [latex]a_{1}>0[/latex] и что среди [latex]a_{2}, a_{3}[/latex] … есть хотя бы одно отрицательное число. Пусть [latex]a_{1},\ldots,a_{n}[/latex] — члены данной последовательности, предшествующие первому отрицательному члену ( [latex]n[/latex] заранее неизвестно). Получить:
[latex]a_{1}a_{2}+a_{2}a_{3}+\ldots+a_{n-1}a_{n}+a_{n}a_{1}[/latex] .Тесты:
Введенные числа | Результат | Комментарий |
2 3 4 -5 | 26 | пройден |
6 0 45 3 -1 | 153 | пройден |
1 -223 | 1 | пройден |
Решение:
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> using namespace std; int main() { double sum = 0 , a_first, a_prev, a_cur; cin >> a_first; a_cur = a_first; a_prev = a_first; while (a_cur >= 0) { cin >> a_cur; if (a_cur < 0) { sum += a_prev*a_first; break; } sum += a_prev*a_cur; a_prev = a_cur; } cout << "Sum = " << sum << endl; return 0; } |
Программа считает по формуле (данной в условии) все введенные положительные числа, пока не встретится отрицательное число.
Ссылка на код.
А на Java решение выглядит так:
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 |
import java.util.*; import java.lang.*; import java.io.*; class solution { public static void main (String[] args) { Scanner sc = new Scanner(System.in); double sum = 0 , a_first, a_prev, a_cur; a_first = sc.nextDouble(); a_cur = a_first; a_prev = a_first; while (a_cur >= 0) { a_cur = sc.nextDouble(); if (a_cur < 0) { sum += a_prev*a_first; break; } sum += a_prev*a_cur; a_prev = a_cur; } System.out.println("Sum = " + sum); } } |
Зачтено, но исправьте, пожалуйста:
— Последний тест не соответствует условию — первое число должно быть положительным.
— Уберите пустые строки.
— Вы ошиблись в тексте условия. В задачнике указано, что «n заранее НЕизвестно»
Исправьте, пожалуйста, формулы с помощью \cdots или \ldots и сделайте правильные отступы в коде.