闖關的lulu

題目描述

    勇者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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章