题目描述
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+9 2i-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;
}