机器人繁殖


一、题目内容

题目描述

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;
}

加油哦! 如有错误和需要改进完善之处,欢迎大家纠正指教。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐