Составить программу на языке ! числа люка определяются так: первое число равно 1, второе равно 3, каждое следующее равно сумме двух предыдущих. составить программу, которая находит сумму первых k чисел люка (k – задается пользователем). определить количество первых чисел люка, таких, что значение ихсуммы не превышает диапазона типа int (long int). вывести в виде таблицы данное значение суммы и три предыдущих значения суммы (с соответствующими количествами чисел люка).
#include <iostream>
using namespace std;
int main()
{
long int f[100];
long int k, i, s;
cin>>(k);
f[1] = 1;
f[2] = 3;
if (k > 0) s = 1;
if (k > 1) s = 4;
for (int i = 3;i<=k;i++)
{
f[i] = f[i - 1] + f[i - 2];
s = f[i] + s;
}
cout<<s;
return 0;
```cpp
#include
using namespace std;
int main() {
int k;
cout << "Введите значение k: ";
cin >> k;
long int prev_prev_sum = 0; // значение предпредыдущей суммы (начальное значение - 0)
long int prev_sum = 1; // значение предыдущей суммы (начальное значение - 1)
long int current_sum = 1; // значение текущей суммы (начальное значение - 1)
cout << " Сумма | Предыдущие суммы" << endl;
cout << "---------|-----------------" << endl;
int count = 1; // счетчик количества чисел люка, значение суммы которых не превышает диапазона типа int
cout << current_sum << " | -" << endl;
for (int i = 2; i <= k; i++) {
long int new_sum = current_sum + prev_sum; // вычисление новой суммы
if (new_sum > INT_MAX) { // проверка, превышает ли новая сумма диапазон типа int
break;
}
cout << new_sum << " | " << prev_sum << ", " << prev_prev_sum << ", " << current_sum << endl;
count++;
prev_prev_sum = prev_sum;
prev_sum = current_sum;
current_sum = new_sum;
}
cout << "Количество чисел люка, чья сумма не превышает диапазон типа int: " << count << endl;
return 0;
}
```
Давай разберем эту программу по шагам:
1. Мы объявляем переменную `k`, которая представляет собой количество первых чисел люка, сумма которых нужно найти. Это значение вводится пользователем с помощью `cin`.
2. Мы объявляем и инициализируем переменные `prev_prev_sum`, `prev_sum` и `current_sum`. `prev_prev_sum` и `prev_sum` представляют собой предыдущие суммы чисел люка, а `current_sum` представляет собой текущую сумму чисел люка. Начальные значения `prev_prev_sum` и `current_sum` равны 0, а значение `prev_sum` равно 1.
3. Мы выводим заголовок для таблицы результатов.
4. Мы выводим первую сумму чисел люка и предыдущие суммы в виде первой строки таблицы.
5. Мы запускаем цикл `for`, который выполняется от `i = 2` до `i <= k`. В каждой итерации цикла мы вычисляем новую сумму чисел люка (`new_sum`) путем сложения текущей суммы (`current_sum`) и предыдущей суммы (`prev_sum`).
6. Мы проверяем, превышает ли новая сумма `new_sum` диапазон типа `int`. Если это так, мы выходим из цикла с помощью ключевого слова `break`.
7. Мы выводим новую сумму и предыдущие суммы в виде строки таблицы.
8. Мы увеличиваем значение счетчика `count` и обновляем значения `prev_prev_sum`, `prev_sum` и `current_sum` для следующей итерации цикла.
9. Мы выводим количество чисел люка, чья сумма не превышает диапазон типа `int`.
Эта программа составляет таблицу со значениями сумм чисел люка и возвращает общее количество чисел люка, сумма которых не превышает диапазон типа `int`. Значения сумм выводятся вместе с предыдущими значениями сумм для наглядности.