C/C++

Программирование на C++

Рассмотреть решение предложенной задачи с использованием всех трех видов циклов. Отладить программу с наиболее рациональным вариантом цикла. Обосновать выбор. Найти все нечетные числа последовательности Фиббоначи, не превышающие заданного числа k. Последовательность определяется законом: F0=F1=1; Fn=Fn-1+Fn-2, для n><
=2. Напишите программу на C++, пожалуйста!
Зачем тут перебирать все виды циклов, если процесс явно итерационный и цикл для него должен быть соответственно тоже итерационным, то есть while или for (;;) (for без параметров !)? А вот выдачу полученных чисел удобнее осуществлять в отдельном параметрическом цикле под их номерами в списке чисел Фибоначчи. Для натуральных чисел любой длины:
 #include  
#include
#include
using namespace std;
int main()
{
int i, n;
mpz_class k = 0;
vector F;
F.push_back(1); F.push_back(1);
n = 1; cout > k;
while (true)
{
F.push_back(F[n - 1] + F[n]);
n++; if (F[n] > k) break;
}
for (i = 0; F[i]
Вадим Кузовков
Вадим Кузовков
66 572
Лучший ответ
 #include <iostream>
using namespace std;
int main() {
int k = 10;
int f0 = 1;
int f1 = 1;
int f2 = 0;
cout << f0 << " " << f1 << " ";
for (int i = 2; i < k; i++) {
f2 = f0 + f1;
if (f2 > k) {
break;
}
if (f2 % 2 != 0) {
cout << f2 << " ";
}
f0 = f1;
f1 = f2;
}
return 0;
}
Валерий Сподаренко Что за прикол с "<" - &lt , ">" - &gt ?
Код решения на C++ с использованием трех видов циклов:

```cpp
#include <iostream>
using namespace std;

int main() {
int k;
cout << "Enter a number: ";
cin >> k;

int f1 = 1, f2 = 1;
cout << "Odd Fibonacci numbers less than or equal to " << k << ":" << endl;

// Цикл while
while (f1 <= k) {
if (f1 % 2 != 0) {
cout << f1 << " ";
}
int temp = f2;
f2 = f1 + f2;
f1 = temp;
}
cout << endl;

// Цикл do-while
f1 = 1, f2 = 1;
cout << "Odd Fibonacci numbers less than or equal to " << k << ":" << endl;
do {
if (f1 % 2 != 0) {
cout << f1 << " ";
}
int temp = f2;
f2 = f1 + f2;
f1 = temp;
} while (f1 <= k);
cout << endl;

// Цикл for
f1 = 1, f2 = 1;
cout << "Odd Fibonacci numbers less than or equal to " << k << ":" << endl;
for (int i = f1; i <= k; i = f1 + f2) {
if (f1 % 2 != 0) {
cout << f1 << " ";
}
int temp = f2;
f2 = f1;
f1 = temp + f2;
}
cout << endl;

return 0;
}
```

Обоснование выбора:

В данном случае оптимальным видом цикла будет цикл `for`, так как он является наиболее понятным, компактным и читаемым способом итерации по последовательности Фибоначчи. Цикл `while` тоже хорошо подходит для решения данной задачи, но требует дополнительной инициализации переменных перед циклом. Цикл `do-while` не очень подходит, так как он продолжит выполнение по крайней мере еще один раз, даже если условие цикла не выполнится ни разу.