Задача:
Даны действительные числа [latex]a_1 , a_2,\ldots[/latex]. Известно, что [latex]a_{1} > 0[/latex] и
что среди [latex]a_2 , a_3,\ldots[/latex] есть хотя бы одно отрицательное число. Пусть
[latex]a_{1} ,\ldots, a_{n}[/latex] – члены данной последовательности, предшествующие
первому отрицательному члену ( n заранее неизвестно). Получить:
и) [latex]n+a_{n}[/latex];
Тесты:
Последовательность [latex]a_{i}[/latex] | [latex]n+a_{n}[/latex] | Результат |
3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 -6 | 24 | Пройден |
2.7183 -0.0001 | 3.7183 | Пройден |
2.7182 81 28 -90 45 -90 | 31 | Пройден |
Алгоритм решения:
- Ввод элементов последовательности продолжается до первого отрицательного числа. Следовательно, можно создать бесконечный цикл, выход из которого осуществляется по условию.
- Если введенное число меньше нуля, происходит выход из цикла. В противном случае текущее количество элементов последовательности увеличивается на единицу, а введенное значение сохраняется в вспомогательную переменную.
- После выхода из цикла имеем значение последнего элемента, удовлетворяющего условию, и его номер. Этих данных достаточно для решения поставленной задачи.
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <cstdio> int main() { int position = 0; //Переменная для хранения номера элемента последовательности //Переменные для хранения текущего и предыдущего значений double current_number = 0.0, previous_number = 0.0; //Цикл повторяется до ввода первого отрицательного числа while(true) { scanf("%lf", ¤t_number); if(current_number < 0) break; previous_number = current_number; position++; } double result = position + previous_number; printf("%lf", result); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.util.*; import java.lang.*; import java.io.*; import java.math.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); double currentNumber = in.nextDouble(); double previousNumber = 0; double position = 0; for(; currentNumber >= 0; position++){ previousNumber = currentNumber; currentNumber = in.nextDouble(); } double result = position + previousNumber; System.out.println(result); } } |
Детали реализации:
Ввод элементов последовательности осуществляется средствами языка Си через подключенный заголовочный файл <cstdio>. Числа из входного потока сохраняются в переменную целочисленного типа с двойной точностью double, так как по условию являются вещественными.
Протестировать программу можно по ссылке: http://ideone.com/qn7kfJ
Реализация на Java: http://ideone.com/rHCk2X
— рубрика и метки
— в таблице названия столбцов не соответствуют содержанию
— Добавил.
— Надеюсь, правильно понял ваше замечание. Привел таблицу к виду, который подразумевается по условию: «данная последовательность -> вычисленное значение -> результат, комментарии».
— У вас в столбце an были указаны значения n, а в столбце с заголовком n — значения an. Думал это заметно и не стал подробно описывать. Но так тоже сойдёт.
Зачтено.
Java версия засчитана, 10 баллов.