列表

详情


NC14979. 闯关的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层时身上的数字

示例1

输入:

4
1
2
3
20

输出:

0
11
110
32211

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3(3.5.2) 解法, 执行用时: 30ms, 内存消耗: 3432K, 提交时间: 2020-02-09 19:53:00

import math
n = int(input())
while n > 0:
    ans = ""
    t = int(input())
    t = 4 * (t // 2) + (t & 1)
    for x in reversed(range(0, 20)):
        while t >= math.factorial(x + 1):
            ans = ans + str(x)
            t = t - math.factorial(x + 1)
    print(ans)
    n = n - 1

C 解法, 执行用时: 2ms, 内存消耗: 384K, 提交时间: 2023-05-20 09:16:20

#include<stdio.h>
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,n;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		if(n%2!=0){
			put(n-1,1);
			printf("0");
		}
		else{
			put(n,1);
		}
		printf("\n");
	}
}

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 472K, 提交时间: 2019-02-13 11:27:53

#include<stdio.h>
int main(){
int i,a[11]={1},n,f,t;
    scanf("%d",&t);
    while(t--){
for(i=0;i<11;i++)
a[i+1]=a[i]*(i+2);
scanf("%d",&f);
n=(f&1)+f/2*4;
for(i=10;i>-1;--i)
n>=a[i]&&printf("%d",i)&&(n-=a[i++]);
    printf("\n");
    }
return 0;
}

上一题