题目描述:舍罕王打算奖赏国际象棋的发明人——宰相西萨·班·达依尔。国王问他想要什么,他对国王说:“陛下,请您在这张棋盘的第1个小格里,赏给我1粒麦子,在第2个小格里给2粒,第3个小格里给4粒,以后每一小格都比前一小格加一倍。请您把这样摆满棋盘上所有的64格的麦粒,都赏给您的仆人吧!”国王觉得这要求太容易满足了,就命令给他这些麦粒。当人们把一袋一袋的麦子搬来开始计数时,国王才发现:就是把全印度甚至全世界的麦粒全拿来,也满足不了那位宰相的要求。 问题是:舍罕王的计算结果是多少粒麦子。
输入要求:输入一个整数n代表棋盘的格子,该数字大于1且小于等于64。如输入2,则表示有2个格子,第一个格子放1粒,第二个格子放2粒,则2个格子一共需要3粒麦子。
输出要求:输出n个格子需要的麦粒数。
代码如下:
#include<stdio.h>
#include<math.h>
int main(){
int w, y, h = 1, k = 0; //h为初始化棋盘第一个格子的麦粒数,k为当前总和
unsigned __int64 sum = 0;
printf("请输入一个整数y(y在0到64之间):\n");
scanf_s("%d", &y);
if (y >= 1 && y < 65) {
for (w = 1; w <= y; w++) {
sum = k + h; //前y格棋盘上所有麦粒数的和加上所求这一格棋盘上麦粒数(Sy=Sy-1 +ay)
k = sum;
h = h * 2;
}
printf("%I64u\n", sum);
}
else {
printf("不符合题意,请重新输入!\n");
scanf_s("%d",&y);
if (y >= 1 && y < 65) {
for (w = 1; w <= y; w++) {
sum = k + h;
k = sum;
h = h * 2;
}
printf("%I64u\n", sum);
}
else {
printf("来捣乱是的吧!这边只能给您强行退出,拜拜了您嘞!\n");
}
}
return 0;
}