題目描述
勇者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;
}