机器人繁殖
一、题目内容
题目描述
X星系的机器人可以自动复制自己。它们用1年的时间可以复制出2个自己,然后就失去复制能力。
每年X星系都会选出1个新出生的机器人发往太空。也就是说,如果X星系原有机器人5个,
1年后总数是:5 + 9 = 14
2年后总数是:5 + 9 + 17 = 31
如果已经探测经过n年后的机器人总数s,你能算出最初有多少机器人吗?
输入
输入一行两个数字n和s,用空格分开,含义如上。n不大于100,s位数不超过50位。
输出
要求输出一行,一个整数,表示最初有机器人多少个。
样例输入
2 31
样例输出
5
二、思路分析
题目内容比较好理解,读题的时候感觉有点像那个兔子繁殖的经典斐波那契数列问题,并且s位数不超过50位,故可以用double保存,所以本题考的就是数学知识求递推公式。
首先根据繁殖关系求出an,再根据an求出Sn,a1即为题目所要求的最初机器人的个数,最后再通过循环枚举出a1即可。
三、代码实现
#include <bits/stdc++.h> //万能头文件
using namespace std;
int main() {
double s, temp = 0;
int n, a = 0; //a为所求最初个数
cin >> n >> s;
while (abs(temp - s) > 1e-6) { //浮点型比较最好不要直接用"=="
a++;
temp = a + n + (a - 1) * (pow(2, n + 1) - 2);
}
cout << a << endl;
return 0;
}
加油哦! 如有错误和需要改进完善之处,欢迎大家纠正指教。