2018年全国多校算法寒假训练营练习比赛(第一场) - J - 闯关的lulu(找规律,递归)

链接:https://www.nowcoder.net/acm/contest/67/J
来源:牛客网

题目描述 
    勇者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层时身上的数字
示例1
输入

4
1
2
3
20
输出

0
11
110
32211
备注:
对于100%的数据,
0 < T <= 100
0 < n <= 10^7


题目给出了3的得到,就是每12层 1 个 3 

要猜的就是多少个3可以得到一个4

规律就是:当k>=3时 ,要得到 k+1 需要 k+2 个 k 

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int T,n;
char s[15][10]={"","0","11","110","21","210","22","220","2211","22110","2221","22210",""};
void slove(int k,int cnt){
    if(k==0) return;
    int base = cnt + 2;
    slove(k/base, cnt + 1);
    for(int i=1;i<=k%base;i++) printf("%d",cnt);
}
int main()
{
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        slove(n/12, 3);
        printf("%s\n",s[n%12]);
    }
    return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值