列表

详情


MT34. 数字构造

描述

对于一个十进制数而言,它的数位和等于将它各位数字相加得到的和。比如 231 的数位和 是 6,3179 的数位和是 20。

现在你知道某个十进制数的数位和等于 s,并且这个数不包含 0,且任意相邻的数位是不同 的,比如 112 或者 102 都是不满足条件的。现在你想知道满足这样的条件的最大的数是多少?

数据范围:

输入描述

第一行包含一个整数𝑠

输出描述

输出满足条件的最大整数。

示例1

输入:

1

输出:

1

示例2

输入:

2

输出:

2

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 380KB, 提交时间: 2020-07-07

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	int s,tmp,len,i;
	scanf("%d",&s);
	if(s==1)
	{
		printf("1");
		return 0;
	}
	else if(s==2)
	{
		printf("2");
		return 0;
	}
	else
	{
		tmp=s%3;
		len=s/3;
		if(tmp==0)
		{
			for(i=0;i<len;i++)
				printf("21");
			return 0;
		}
		else if(tmp==1)
		{
			for(i=0;i<len;i++)
				printf("12");
			printf("1");
			return 0;
		}
		else if(tmp==2)
		{
			for(i=0;i<len;i++)
				printf("21");
			printf("2");
			return 0;
		}
	}
}

C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-12-18

#include<stdio.h>
int main(void)
{
    int n,i,temp,len;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==1)
        {
            printf("1");
            return 0;
        } 
        else if(n==2)
        {
            printf("2");
            return 0;
        }
        else
        {
            temp=n%3;
            len=n/3;
            if(temp==0)
            {
                for(i=0;i<len;i++)
                    printf("21");
                return 0;
            }
            else if(temp==1)
            {
                for(i=0;i<len;i++)
                printf("12");
               printf("1");
                return 0;
            }
            else if(temp==2)
            {
                for(i=0;i<len;i++)
                    printf("21");
                printf("2");
                return 0;
            }
        }
    }
    return 0;
}

上一题