C語言舍罕王的失算代碼及解析!學習玩耍兩不誤!

問題描述

相傳國際象棋是古印度舍罕王的宰相達依爾發明的。舍罕王十分喜愛象棋,決定讓宰相自己選擇何種賞賜。這位聰明的宰相指着 8×8 共64格的象棋棋盤說:陛下,請您賞給我一些麥子吧。就在棋盤的第1格中放1粒,第2格放2粒,第3格放4粒,以後每一格都比前一格增加一倍,依此放完棋盤上64格,我就感激不盡了。舍罕王讓人扛來一袋麥子,他要兌現他的許諾。請編程求出國王總共需要將多少麥子賞賜給他的宰相。

該問題描述比較複雜,但只要抽象出其數學模型,便很容易解決了。

根據題意,麥子的放法是:在棋盤的第1格中放1粒,第2格放2粒,第3格放4粒,以後每一格都比前一格增加一倍,依次放完棋盤上64格。

由此可推知,按照如此放法可得到的麥子的總數爲:

 

算法設計

在問題分析中已經將所需麥子的總數抽象爲數學公式:

 

現在只要考慮如何設計算法實現累加和即可。顯然,可釆用循環結構,每循環一次就實現一次累加,總共循環64次可獲得累加和。

下面是完整的程序:

#include

#include

int main()

{

double sum = 0; /*定義double型變量sum存放累加和*/

int i;

/*使用循環求累加和*/

for( i=1; i<=64; i++ )

sum = sum + pow(2.0, (i-1)); /*注意變量爲double型*/

printf("國王需要賞賜給宰相的麥子總數爲:%f", sum); /*打印結果*/

return 0;

}

國王需要賞賜給宰相的麥子總數爲:

18446744073709551616.000000

「我是一名從事了10年開發的老程序員,最近我花了一些時間整理關於C語言、C++,自己有做的材料的整合,一個完整的學習C語言、C++的路線,學習材料和工具。全球最大的C/C++、編程愛好者的聚集地就在我這裏,企鵝<C語言C++編程學習>!歡迎初學和進階中的小夥伴。希望你也能憑自己的努力,成爲下一個優秀的程序員。工作需要、感興趣、爲了入行、轉行需要學習C/C++的夥伴可以跟我一起學習!」

關注我,帶你遨遊代碼世界!