Проблема заключается в проверке dp[i]<=1000
в этой строке:
for(int i=2; dp[i]<=1000; i++){
Значение i
- это индекс элемента массива next , который всегда содержит ноль, поэтому тест dp[i]<=1000
всегда возвращает true . Я не уверен, почему это не вызывает сбой памяти, когда вы go за концом массива. Просто случайность, наверное.
Возможно, for
l oop, переписанный как while
l oop, делает это более понятным:
int i = 2;
while (dp[i] <= 1000) {
dp[i] = dp[i - 1] + dp[i - 2];
cout << dp[i] << " ";
i++;
}
Один из способов сделать эту работу, используя for
l oop:
#include <iostream>
using namespace std;
int main() {
int dp[22] = {0};
dp[0] = 0;
dp[1] = 1;
cout << dp[0] << " " << dp[1] << " ";
for (int i = 2; ; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
if (dp[i] <= 1000) {
cout << dp[i] << " ";
} else {
break;
}
}
cout << endl;
return 0;
}