問題描述
相傳國際象棋是古印度舍罕王的宰相達依爾發明的。舍罕王十分喜愛象棋,決定讓宰相自己選擇何種賞賜。這位聰明的宰相指着 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++的夥伴可以跟我一起學習!」
關注我,帶你遨遊代碼世界!