前提
C言語で入力した数列がフィボナッチ数列かどうかを判定するプログラミングを作っています。
自分の欲しい結果とは違う結果が返ってきてしまいます。
実現したいこと
scanfを用いて最初に数列の長さnを入力。その後長さnの数列を初項から末項までを入力。関数checkseriesを用いて入力した数列がフィボナッチ数列かどうかを判定する。フィボナッチ数列であれば0を返す。フィボナッチ数列でなければ最初に間違えた項数(i)を返す。
発生している問題・エラーメッセージ
入力を6、3、4、7、11、18、30と入力したとき、項数は6、最初に間違えた項数は第6項なので関数checkseriesが返す値は6のはずなのに30が返ってくる。
該当のソースコード
c
1include <stdio.h> 2 3int checkseries(int array[], int len); 4 5int main(void) { 6 7 int n; 8 int i; 9 int a[40]; 10 scanf("%d", &n); 11 12 for(i=0; i<n; i++){ 13 scanf("%d", &a[i]); 14 } 15 printf("%d", checkseries(a,n)); 16 if(checkseries(a,n)==0){ 17 printf("This series is Fibonacci!\n"); 18 } 19 else{ 20 printf("Not Fibonacci. The first problem number is: %d\n", checkseries(a,n)+1); 21 printf("(Correct: %d+%d=%d)\n", a[checkseries(a,n)-1], a[checkseries(a,n)-2], a[checkseries(a,n)-1]+a[checkseries(a,n)-2]); 22 } 23 24 return 0; 25} 26 27int checkseries(int array[], int len){ 28 int i; 29 for(i=2; i<len; i++){ 30 if(array[i]!=array[i-1] + array[i-2]){ 31 break; 32 printf("i is %d\n", i); 33 34 return i; 35 } 36 if(i==len-1 && array[i]==array[i-1]+array[i-2]){ 37 return 0; 38 } 39 } 40} 41 42 43 44
試したこと
なんどもプログラムを見てみましたが原因はわかりませんでした。
補足情報(FW/ツールのバージョンなど)
c言語をつかっているのですがバージョンなどはわかりません。すみません。
> 入力を6、3、4、7、11、18、30と入力したとき、項数は6、最初に間違えた項数は第6項なので関数checkseriesが返す値は6のはず...
フィボナッチ数列って a{i} = a{i - 1} + a{i - 2} でできる数列だった気がするのですが…。

回答1件
あなたの回答
tips
プレビュー