题目叙述:c++
标题:机器人繁殖函数
X星系的机器人能够自动复制本身。它们用1年的时间能够复制出2个本身,而后就失去复制能力。
每一年X星系都会选出1个新出生的机器人发往太空。也就是说,若是X星系原有机器人5个,
1年后总数是:5 + 9 = 14
2年后总数是:5 + 9 + 17 = 31测试
若是已经探测通过n年后的机器人总数s,你能算出最初有多少机器人吗?spa
数据格式:操作系统
输入一行两个数字n和s,用空格分开,含义如上。n不大于100,s位数不超过50位。调试
要求输出一行,一个整数,表示最初有机器人多少个。内存
例如:
用户输入:
2 31ci
则程序应该输出:
5资源
再例如:
用户输入:
97 2218388550399401452619230609499编译器
则程序应该输出:
8
资源约定:
峰值内存消耗 < 512M
CPU消耗 < 1000ms
请严格按要求输出,不要多此一举地打印相似:“请您输入...” 的多余内容。
全部代码放在同一个源文件中,调试经过后,拷贝提交该源码。
注意: main函数须要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操做系统的特殊函数。
注意: 全部依赖的函数必须明确地在源文件中 #include <xxx>, 不能经过工程设置而省略经常使用头文件。
提交时,注意选择所指望的编译器类型。
问题分析:不难发现该题是一道数学题 找到规律就能够了
咱们能够假设起始的机器人数量为x
年份及对应数量以下表示:
1: x+2x-1 =3x-1 = (2^2-1)(x-1)+2
2: x+2x-1+2(2x-1)-1 =7x-4 =(2^3-1)(x-1)+3
3: x+2x-1+2(2x-1)-1+2(2(2x-1)-1)-1 = 15x-11 =(2^4-1)(x-1)+4
........
依次类推,第n年的数量:sum=(2^(n+1)-1)(x-1)+n+1
进一步化简能够获得 x=(sum-n-1)/(2^(n+1)-1)+1
获得规律后直接敲代码就好了,比较简短,测试可AC
C++代码以下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n; double sum; //这里sum值须要用double存储 由于题中要求s不超过50位,较大
cin>>n>>sum;
double p=pow(2,n+1);
int x=(sum-n-1)/(p-1)+1;
cout<<x;
return 0;
}