题目描述
勇者lulu某天进入了一个高度10,000,000层的闯关塔,在塔里每到一层楼,他都会获得对应数量的0 1(看情况获得),然后塔里有一个法则,当你身上某个数字达到一个特定的数量时,它们会合成为下一个数字,现在问题来了,当lulu从1层到达第n层的时候,他身上的数字是多少。
第1层 0
第2层 11
第3层 110
第4层 21
第5层 210
第6层 22
第7层 220
第8层 2211
第9层 22110
第10层 2221
第11层 22210
第12层 3
输入描述:
第2到2+T-1行每行有一个整数n(0<n<=10^7)。
输出描述:
从大到小输出lulu到达第n层时身上的数字
题解:1-->1(0) 2->1 1 3-->1 1 1(0) 4-->1 1 1 1(2 1) 5-->1 1 1 1 1(2 1 0)......可知 每三个重复加一,其中奇数末尾为0,而偶数末尾为1 ,用递归解。
第一行是样例数T(T<100)#include<cstdio> #include<algorithm> using namespace std; int n; void put(int n,int k){ if(n==0) return ; put(n/(k+2),k+1);//满足三个重复 n=n%(k+2);//剩余不足的则该是多大就为多大 while(n--){ printf("%d",k); } } int main() { int t; scanf("%d",&t); while(t--){ scanf("%d",&n); if(n&1) { put(n-1,1); printf("0"); }else{ put(n,1); } printf("\n"); } return 0; }