本文主要是介绍机器人繁殖(蓝桥杯历年试题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
标题:机器人繁殖
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
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
提交时,注意选择所期望的编译器类型。
暴力模拟,目前没有想到更高效的方式
import java.math.BigInteger;
import java.util.Scanner;public class Main {public static void main(String[] args) { Scanner input = new Scanner(System.in);int n = input.nextInt();BigInteger s = input.nextBigInteger();for(int i=1 ;i<=100;i++){BigInteger[] dp = new BigInteger[n+1];dp[0] = new BigInteger(i+"");dp[1] = dp[0].multiply(new BigInteger("2")).subtract(BigInteger.ONE).add(dp[0]);for(int j=2;j<=n;j++){dp[j] = dp[j-1].subtract(dp[j-2]).multiply(new BigInteger("2")).subtract(BigInteger.ONE).add(dp[j-1]);}if(dp[n].equals(s)){System.out.println(i);break;}}} }
这篇关于机器人繁殖(蓝桥杯历年试题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!