首页 > 试题广场 >

多多的数字组合

[编程题]多多的数字组合
  • 热度指数:8627 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
多多君最近在研究某种数字组合:
定义为:每个数字的十进制表示中(0~9),每个数位各不相同且各个数位之和等于N。
满足条件的数字可能很多,找到其中的最小值即可。
多多君还有很多研究课题,于是多多君找到了你--未来的计算机科学家寻求帮助。

数据范围:
进阶:空间复杂度 ,时间复杂度

输入描述:
共一行,一个正整数N,如题意所示,表示组合中数字不同数位之和。
(1 <= N <= 1,000)


输出描述:
共一行,一个整数,表示该组合中的最小值。
如果组合中没有任何符合条件的数字,那么输出-1即可。
示例1

输入

5

输出

5

说明

符合条件的数字有:5,14,23,32,41
其中最小值为5
示例2

输入

12

输出

39

说明


示例3

输入

50

输出

-1

说明

没有符合条件的数字 (T▽T) 
n = int(input())
after_minize = n
number_mut = 9
result = 0
i = 0
if n < 10:
    print(n)
elif n > 45:
    print(-1)
else:
    while after_minize > 9:
        result = (10**i) * number_mut + result
        i = i + 1
        after_minize = after_minize - number_mut
        number_mut = number_mut - 1

    if after_minize < number_mut:
        result = result + after_minize * (10**i)
        print(result)
    else:
        a = after_minize
        while after_minize > number_mut:
            after_minize = after_minize - 1
        result = result + after_minize * (10**i)
        number_mut = number_mut - 1
        i = i + 1

        after_minize = a - after_minize
        b = after_minize
        while after_minize > number_mut:
            after_minize = after_minize - 1
        result = result + after_minize * (10**(i)) + (b-after_minize) * (10**(i+1))
        print(result)
发表于 2023-03-29 14:54:57 回复(0)
Python3
a=int(input())
def g(x,m):
    if x==0:
        return ""
    if x<m:
        return str(x)
    else:
        return g(x-m, m-1)+str(m)
if a>45:
    print(-1)
else:
    print(g(a,9))


发表于 2021-10-29 07:44:32 回复(0)
#暴力法
n=int(input())
if n>45:
    print(-1)
elif n<=9:
    print(n)
elif 9<n<=17:
    print(str(n-9)+str(9))
elif 17<n<=24:
    print(str(n-17)+str(89))
elif 24<n<=30:
    print(str(n-24)+str(789))
elif 30<n<=35:
    print(str(n-30)+str(6789))
elif 35<n<=39:
    print(str(n-35)+str(56789))
elif 39<n<=42:
    print(str(n-39)+str(456789))
elif 42<n<=44:
    print(str(n-42)+str(3456789))
else:
    print(123456789)
发表于 2021-08-30 15:06:02 回复(0)
python3
num = int(input())
res = 0
count = 0
for i in range(1,10)[::-1]:
    if i <= num and num > 0:
        num = num - i
        res = res + i * (10 ** count)
        count += 1
print(res) if num == 0 else print(-1)


发表于 2021-08-17 22:42:42 回复(0)
list=[1,2,3,4,5,6,7,8,9]
N=int (input(''))
M=N
if N<=45:
    if N<10:
        print(N)
    else:
        number=9
        count=0
        while(N>number):
            N=N-number
            number=number-1
            count=count+1
        one=M-sum(list[-count:])
        list2=[str(i) for i in list[-count:]]
        s=''.join(list2)
        if one==0:
            print(s)
        else:
            Z=str(one)+s
            print(Z)

else:
    print(-1)

有点投机取巧的意思。
发表于 2021-05-12 10:59:04 回复(0)