天天看點

失算問題(一)

版權聲明:您好,轉載請留下本人部落格的位址,謝謝 https://blog.csdn.net/hongbochen1223/article/details/46676393

1:問題提出

相傳現在流行的國際象棋是古代舍罕王的在想達依兒發明的。舍罕王十分喜愛象棋,決定讓宰相自己要求得到什麼賞賜。這位聰明的宰相指着8x8共64格的象棋盤說:陛下,請賞賜給我一些麥子吧,就在棋盤的第1個格子中放1粒,第2格放2粒,第3格放4粒,以後每一格子都比前一格增一倍,依次放完棋盤上的64格,我就感恩不盡了。

舍罕王讓人扛來一袋麥子,他要兌現他的許諾。

請問,國王能兌現他的諾言嗎?共有多少麥子賞賜他的宰相?合多少立方米(1立方米麥子1.42e8粒)?如果把這些麥子堆成一個正圓錐形的麥堆,這堆麥堆約多高?

2:分析

第1格1粒,第2格2粒,第3格4粒,第4格8粒,第5格16粒,擇總粒數應該為:

總粒數 = 1 + 2 + 2(2) + 2(3) + 2(4) + … + 2(63) [其中2(2)的意思為2的2次方]

當算出麥子的總粒數之後,其他的就好算了。

3:程式實作

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define N 1.42e8
#define PI 3.1415926

/**
 * 舍罕王的失算
 */
int main()
{
    double t = 1; /* 表示第一個1粒米 */
    double s = 1; /* 表示米的總粒數 */
    int n = 1; /* 表示第n個格子  */
    int size = 1;
    double v; /* 平方數 */
    double h; /* 高度 */

    printf("請輸入總格數:\n");
    scanf("%d",&size);

    for(n = 1; n < size; n++){
        t = t * 2;
        s = s + t;
    }

    printf("總粒數為:%.3e粒\n",s);

    v = s / N;
    printf("折合體積約為: %.0f立方米\n",v);

    /** 由圓錐體的體積計算為 v = 1/3*s*h得 **/

    double h2 = v * 9 / PI;
    h = pow(h2,1.0/3);

    printf("正圓錐的高度為: %.0f米\n",h);

    return 0;
}
           

4:程式結果

上一篇: 報數遊戲