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:程序结果
原文地址:http://blog.csdn.net/hongbochen1223/article/details/46676393