闯关的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
输入描述:
第一行是样例数T(T<100)
第2到2+T-1行每行有一个整数n(0 < n <= 10^7)。
输出描述:
从大到小输出lulu到达第n层时身上的数字
牛客网的2018年全国多校算法寒假训练营练习比赛(第一场)的J题。。都是模拟题,但挺有趣!
题意:
从样例分析一波,然后找出规律,输一个n,输出对应的数字。
想法:
分析分析样例就能发现,两个0组成一个1,三个1组成1个2,4个2组成一个3,然后从第一层开始,奇数层多一个0,偶数层多一个0和一个1,题意猜对了就很好写了。
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
int i;
int x;
int j;
int k;
int v[10005];
memset(v, 0, sizeof(v));
cin >> n;
v[0] += n;
v[1] += n/2;
i = 0;
x = 2;
while(1)
{
if(v[i]/x == 0)
{
break;
}
v[i+1] += v[i]/x;
v[i] %= x;
x++;
i++;
}
for(j = i; j >= 0; j--)
{
for(k = 0; k < v[j]; k++)
{
cout << j;
}
}
cout << endl;
}
return 0;
}