蓝桥杯竞赛题目:”机器人繁殖“解析及题解
更新:HHH   时间:2023-1-7



标题:机器人繁殖
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
再例如:
用户输入:
97 2218388550399401452619230609499
则程序应该输出:
8
资源约定:
峰值内存消耗 < 512M
CPU消耗  < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

这类算法题目,看起来不难,但是实际编程时,会发现容易被卡住,有些地方跳不出去

那么,接下来,我会为各位解释这类题目的几种算法

第一种:找规律

其实规律不难找出

可以看出来,按照这个规律慢慢推算就可以得出答案

接下来把公式用代码写出即可。

第二种:简单粗暴法

因为题目给出的是,N年和S个机器人,求的是最初的机器人个数

而在C语言中,while()循环中,当括号里面的数字为0时默认跳出循环

那么就可以把1~n/2中间的数字都代进去试一遍,看看谁符合条件

为什么是n/2呢,因为题目要求S要小于50位数,而直接代入n会导致数字太大

接下来就可以,用for循环逐个代入1~n然后用while来循环选出符合条件的数字,找到以后用break跳出。

第三种:递归法

思路同上,只不过代码更短更简洁。


最后,其实算法类的题目做起来很有意思,解题的过程会枯燥,会无趣,但是坐在那里一个下午,一个晚上,一个周末解出题目后的快感,也是酣畅淋漓的。




返回编程语言教程...