[蓝桥杯][2015年第六届真题]机器人繁殖 数学+推公式+大数类

本文汇总蓝桥杯一道真题及题解。题目围绕X星系机器人复制展开,已知每年复制规则及发往太空数量,给出经过n年后机器人总数s,求最初机器人数量。文中介绍通过打表找前n项和通式,移项化简求解,还提到n需加1。

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

蓝桥杯历年真题题目及题解目录汇总 

 

题目链接:https://www.dotcpp.com/oj/problem1831.html

 

题目描述

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

 

这题的公式特别好推,不妨先打个表观察,设r为初始总数

n1234
第n代个数r2*r-12*(2*r-1)-12*(2*(2*r-1)-1)-1
前n代总数r3*r-17*r-415*r-11

 

 

 

 

由上面的表,我们可以找出前n项和的通式

(2^{n}-1)*r-(2^{n}-1-n)=s

移项化简得, r=(s+(2^{n}-1-n))/(2^{n}-1)

大功告成!!!

最后还有个小问题,题目给的n是n年后,对应就是n+1代,所以n要加1

import java.math.BigInteger;
import java.util.Scanner;

public class 机器人繁殖 {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt()+1;
		BigInteger s = in.nextBigInteger();
		BigInteger tpow = BigInteger.valueOf(2).pow(n);
		BigInteger r = s.add(tpow.subtract(BigInteger.valueOf(1+n))).divide(tpow.subtract(BigInteger.ONE));
		System.out.println(r);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值