[英]Fibonacci function for user input numbers
我正在制作一個像斐波那契數列這樣的程序,但是對於不超過用戶提供的值的數字,例如:0 到 5 (0, 1, 2, 3, 4)。 程序需要計算數字的總和,向右移動並計算其他五個數字。 它適用於斐波那契數列,但不適用於更高的數字。 有誰知道如何做到這一點?
#include <stdio.h>
int main() {
int gg; //number which user inputs
int dg = 0; //first number
int next = 0;
int n;
int i;
printf("Number of series: ");
scanf("%d", &gg);
printf("Positive integer: ");//max number which outputs in printf("Series: \n", gg), etc. 1000;
scanf("%d", &n);
printf("Series: \n", gg); //result
for (i = 0; i < gg; i++) {
printf("%d, ", i);
}
next = gg + dg;
while(next <= n){
printf("%d, ", next);
dg = gg;
gg = next;
next = gg + dg;
}
return 0;
}
對於 0 到 5 的值,它應該輸出:
0, 1, 2, 3, 4, 10, 20, 39, 76, 149, 294...
但它輸出:
0, 1, 2, 3, 4, 5, 10, 15, 25, 40, 65, 105, 170, 275,
您需要保存最后的第 n 個值,而不僅僅是最后兩個值。 在您的示例中,您需要存儲最后五個值。 您可以為此使用數組:
#include <stdio.h>
#include <stdlib.h>
int main() {
int series_number;
int *previous_numbers;
int marker = 0;
int max_series_value;
int next = 0;
printf("Number of series: ");
scanf("%d", &series_number);
printf("Positive integer: ");
scanf("%d", &max_series_value);
printf("Series %d: \n", series_number);
previous_numbers = malloc(sizeof *previous_numbers *series_number);
for (int i = 0; i < series_number; i++) {
printf("%d, ", i);
previous_numbers[i] = i;
next += i;
}
previous_numbers[marker] = next;
marker = (marker+1) % series_number;
while(next <= max_series_value){
printf("%d, ", next);
next = 0;
for (int i = 0; i < series_number; i++) {
next += previous_numbers[(marker+i) % series_number];
}
previous_numbers[marker] = next;
marker = (marker+1) % series_number;
}
free(previous_numbers);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.