机器人繁殖

题目描述

X 星系的机器人可以自动复制自己。它们用 1 年的时间可以复制出 2 个自己,然后就失去复制能力。

每年 X 星系都会选出 1 个新出生的机器人发往太空。也就是说,如果 X 星系原有机器人 5 个,1 年后总数是:5 + 9 = 14,2 年后总数是:5 + 9 + 17 = 31。

如果已经探测经过 n 年后的机器人总数 s ,你能算出最初有多少机器人吗?

输入描述

输入一行两个数字 n 和 s,用空格分开,含义如上。n 不大于 100,s 位数不超过 50 位。

输出描述

要求输出一行,一个整数,表示最初有机器人多少个。

输入输出样例

示例 1

输入

2 31

输出

5
示例 2

输入

97 2218388550399401452619230609499

输出

8

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

总通过次数: 803  |  总提交次数: 958  |  通过率: 83.8%

难度: 困难   标签: 2015, 模拟, 国赛

代码:

#include <stdio.h>

#define max 1000 // 定义一个常量max为1000,虽然在代码中未使用

int main()
{
    double n, s; // n表示输入的次数,s表示初始值
    double i, sum, num, aum, bum, yes;

    // 使用while循环读取输入,当输入结束(EOF)时循环终止
    while (scanf("%lf %lf", &n, &s) != EOF)
    {
        // 初始化变量
        sum = 0;  // sum用于保存阶段性计算结果
        aum = 0;  // aum用于累加sum的结果
        num = 1;  // num用于保存指数增长的值
        bum = 1;  // bum用于累加num的结果

        // 循环n次进行计算
        for (i = 0; i < n; i++)
        {    
            // 计算sum:每次循环sum翻倍加1
            sum = sum * 2 + 1;
            // 累加sum到aum
            aum = aum + sum;
            // num翻倍
            num = num * 2;
            // 累加num到bum
            bum = bum + num;
        }

        // 计算最终结果yes,即(s + aum) / bum
        yes = (s + aum) / bum;

        // 输出结果,保留小数点后0位
        printf("%.0lf\n", yes);
    }

    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值