机器人繁殖

该博客探讨了机器人繁殖问题,指出其与斐波那契数列的相似性。博主提供了一个计算公式,用于确定在考虑机器人繁殖的情况下,初始机器人数量。通过求和并进行数学化简,得出机器人总数与年份的关系,并给出了相应的C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



标题:机器人繁殖


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>, 不能通过工程设置而省略常用头文件。


提交时,注意选择所期望的编译器类型。


思路 :仔细观察题目后你会发现题目和斐波那契数列很像 

如果不发射机器人 :机器人数量变化是   x      x+2x     x+2x+4x       x+2x+4x+8x    ……      (2^(n+1)-1)x

              0年     1年           2年              3年                                   n年

也就是说当你知道机器人总数后   除以(2^(n+1)-1)   就能得到 初始的机器人数   


要注意的是    给的机器人数量 是 每年发出一个新机器人后的数量  所以要求出 到底发出送了多少机器人  (注意:发出去的机器人也可以繁殖 这些数量同样要加上   )

听起来很麻烦 其实 就一个公式的事  应为是有规律的  :

第一年 发出的机器人变成了   2^(n)-1    个

第2年 发出的机器人变成了   2^(n-1)-1    个

第3年 发出的机器人变成了   2^(n-2)-1    个

……

第n-1年 发出的机器人变成了   2^2 - 1 个

第n年 发出的机器人变成了    2^1 -1 个

求一下和   就是 ( 2^(n+1)-1)-1-n       ;(应为没有2^0  说以多加个 1 要减去)

化简一下就是 2^(n+1)-n-2;

# include <stdio.h>
# include <math.h>


int main(void)
{
int n;
  
double a,sum,c,b;//由于数据很大用 double 存储 


scanf("%d %lf",&n,&sum);

c =pow(2,n+1)-n-2;//求每年送出去的机器人总数 
a =(sum+c);//求出每年不把机器人发送到太空的 机器人总数 
b=(pow(2,n+1)-1);//机器人的增长倍数  于年数有关 0年1倍  1年 3倍  2年 7倍   3年 15倍   4年 31倍   就是  2的(n+1)次方-1 

printf("%d",(int)(a/b));//用总数除以增长倍数  初始机器人数 
return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值