Задача:
Дано натуральное число [latex]n[/latex], действительные числа [latex]{a}_{1},…,{a}_{n}[/latex] . Получить числа[latex]{b}_{1},…,{b}_{n}[/latex], которые связаны с [latex]{a}_{1},…,{a}_{n}[/latex] следующим образом:
[latex]{ b }_{ 1 }={ a }_{ 1 },{ \quad b }_{ n }={ a }_{ n },\quad { b }_{ i }=\frac { { a }_{ i+1 }\quad -\quad { a }_{ i } }{ 3 } ,\quad i=2,…,n-1[/latex]
Тесты: (числа разделяются «|» для удобного чтения)
Ввод | Вывод | Комментарий: |
3 | 3 | 3 | 3 | 3 | 0 | 3 | Работает. |
4 | 3.14 | -2.71 | 42 | 10 | 3.14 | 14.9033 | -10.6667 | 10 | Работает. |
1 | 2 | 3 | 4 | 5 | 2 | Работает. |
5 | 4 | -3 | 2 | -1 | 0 | 4 | 1.66667 | -1 | 0.333333 | 0 | Работает. |
Объяснение переменных:
[latex]n[/latex] — это [latex]n[/latex] из условия. [latex]a1, a2[/latex] — динамические числа, которые меняются с каждым шагом цикла. [latex]a1[/latex] — вводится с клавиатуры. [latex]a2[/latex] — дублируется с [latex]a1[/latex] посредством шага цикла. Нужны для выполнения условия [latex]{ b }_{ i }=\frac { { a }_{ i+1 }\quad -\quad { a }_{ i } }{ 3 }[/latex]
Код: Проверить на ideone.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> using namespace std; int main(){ int n; double a1, a2 = 0; cin >> n; for(int i = 0; (cin >> a1)&&(i < n); i++, a2 = a1){ if( i == 0 ){ // выполняется ТОЛЬКО при первом наге цикла. cout << a1 << " "; // выведу первое число } else if( i >=2 ){ // выолнение основной задачи cout << ((a1 - a2) / 3.0) << " "; // выведу числа такие, какие требует условие задачи if( i == n - 1){ // выполнение условия bn=an cout << a1; } } } } |
Алгоритм выполнения объясняется в комментариях в коде
Особенности:
- Переменные:
- int n<code>;. <code>int<code> , ибо так требует негласное условие задачи.
- double a1, a2<code>;. <code>double<code> так как в задаче не обговаривалось на каком числовом поле её следует выполнять, то я предпочёл [latex]a1,a2 \in \Re [/latex] .
- Цикл
<code>for<code> (укажу особенности):
- (i++, a2 = a1)<code> - шаг цикла (модификация). Увеличение счётчика на единицу, присвоение [latex]a2[/latex] значение [latex]a1[/latex]
Сложность этой задачи сводится к понимаю a2 = a1<code>. Цикл выполнит шаг тогда, когда он выполнил задачу своего "тела". Так как на следущее выполнение "тела" [latex]a2[/latex] "не успеет" обновится, то [latex]a2[/latex] становится "предыдущим" элементом
Итог работы:
Код обрабатывает поток данных [latex]n[/latex] раз. Это значит, что лишние числа будут игнорироваться.