用C语言根据输入的棋盘格子数输出当前所需麦子数量

题目描述:舍罕王打算奖赏国际象棋的发明人——宰相西萨·班·达依尔。国王问他想要什么,他对国王说:“陛下,请您在这张棋盘的第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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值