簡體   English   中英

在 C 中創建斐波那契數列

[英]Creating a Fibonacci sequence in C

考慮一個斐波那契數列,其值不超過四百萬。 求偶值項的總和。 您的答案必須是 4613732。

#include <stdio.h>

int main()
{
   int a =0,b=1,c=0,sum=0;

   while (c<=10){
       int c=a+b;
       a=b;
       b=c;

       if(c%2==0){
           sum=sum+c;
       }
   }

   printf("%d",sum);

   return 0;
}

output 結果是空白的。 我試了 10 來計算時間更短,答案應該是 2+8=10。 我不知道該怎么辦。

int c=a+b;

這不會修改在循環外聲明的變量c 它創建了一個新變量,其 scope 只是循環體。 你只想要c=a+b; 這里。

您還有另一個錯誤,即在循環迭代c超出其限制值,該值仍可能被添加到總和中,即使它不應該被添加。 例如,如果您將循環測試替換為while (c <= 7) ,您仍然會得到 10 作為答案,而不是正確的 2。考慮如何重組循環體來解決這個問題。

主要問題在這里:

int c = a + b;

您已經重新定義了變量c ,它在每次迭代中都隱藏了原始變量。 從那里刪除int聲明。

另外請注意,您要迭代多達400 萬次以獲得所需的結果。 因此,將迭代限制從10更改為4000000 。*


* 建議在程序頂部聲明一個宏常量以避免出現幻數

int a = b+c是您代碼中的主要問題。 那行代碼重新定義了整個變量聲明。 所以你想把 c = a+b

#include <stdio.h>

int main()
{
   int a =0,b=1,c=0,sum=0;

   while (c<=4000000){
       c=a+b; // just remove the `int` and this should fix it
       a=b;
       b=c;

       if(c%2==0){
           sum=sum+c;
       }
   }

   printf("%d",sum);

   return 0;
}

輸出: 4613732

在這個問題中

int c=a+b;

您沒有使用在方法外部聲明的值 Insted 您正在定義一個僅適用於方法內部的新變量。 嘗試刪除while循環內的int decleration 它應該可以工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM