题库ID43709: 机器人繁殖 C++

题目描述

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

思路 

根据样例分析:
机器人总数sum增量add / 年(前所有年 i 的和 乘2 减1 )
5令初始值为 i ,即此处 i = 5
5+92i-1
5+9+17

6i-1

枚举法:依次列举机器人初始值 i ,对 n 年所得的机器人总数与 s 值进行校对。
根据样例2的 s 值,采用高精度double型。

AC代码 

#include <iostream>
using namespace std;

int main()
{
    double n,s,sum=0,add=0;
    cin >> n >> s;
    for(int i = 0; i < 1000; i++){  //i表示最初机器人数,枚举法
        add = i;
        sum = i;
        for(int j = 0; j < n; j++){
            add = add * 2 -1;  //增量
            sum += add; //机器人总数
        }
        if(sum == s){  //如果此时的i满足n年后机器人的总数则找到答案i
            cout << i;
            break;
        }
    }
    return 0;
}
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值