首页 > 试题广场 >

组个最小数 (20)

[编程题]组个最小数 (20)
  • 热度指数:19806 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:

给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。



现给定数字,请编写程序输出能够组成的最小的数。

输入描述:
每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空
格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。


输出描述:
在一行中输出能够组成的最小的数。
示例1

输入

2 2 0 0 0 3 0 0 1 0

输出

10015558
L = [eval(i) for i in input().split()]
L = [str(i)*j for i,j in enumerate(L)]
L = list(''.join(L))
for i,j in enumerate(L):
    if j != '0':
        break
L[0], L[i] = L[i], L[0]
print(''.join(L))

发表于 2019-08-28 16:12:19 回复(0)
# -*- coding:utf-8 -*-
if __name__ == '__main__':
    c_num = list(map(int, input().split()))
    minx = 0
    str1 = ''
    if c_num[0]:
        for i in range(1, 10):
            if c_num[i]:
                str1 += str(i) + '0' * c_num[0] + str(i) * (c_num[i] - 1)
                minx = i
                break
        for i in range(minx + 1, 10):
            str1 += str(i) * c_num[i]
    else:
        for i in range(1, 10):
            str1 += str(i) * c_num[i]
    print(str1)
发表于 2019-05-13 19:12:13 回复(0)
ls=list(map(int,input().split()))
if ls[0]==0:
    for i in range(1,len(ls)):
        print(ls[i]*str(i),end='')
else:
    flog=0
    for j in range(1,len(ls)):
        if flog==0:
            if ls[j]==0:
                continue
            else:
                print(str(j)+ls[0]*'0',end='')
                flog=1
            print((ls[j]-1)*str(j),end='')
            continue
        print(ls[j]*str(j),end='')
            新手,多多指教

发表于 2019-03-22 20:25:50 回复(0)
output = ""
List1 = []
List = [i for i in input().split()]
for i in range(len(List)):
    for j in range(int(List[i])):
        List1.append(i) 
for i in range(len(List1)):
    if List1[i] != 0:
        List1[0],List1[i] = List1[i],List1[0]
        break
for i in List1:
    output += str(i)
print(output)

发表于 2019-03-08 09:15:58 回复(0)

已经按从小到大开始加入到数组中了,所以只要在查找过程中找到一个非零数弹出插入到第一位即为最小数

while True:
    try:
        digitList = list(map(int,input().split()))
        numList = []
        getFirstNum = False
        for i in range(10):
            for j in range(digitList[i]):
                numList.append(i)
                if not getFirstNum and i != 0:
                    numList.insert(0,numList.pop(-1))
                    getFirstNum = True
        print("".join(map(str,numList)))
    except Exception:
        break
编辑于 2018-09-20 23:59:50 回复(2)
x = list(map(int,input().strip().split()))
s = []
for i in range(10):
s += [i] * x[i]
t = min(i for i in s if i != 0)
ss = [t]
s.remove(t)
print(''.join(map(str, ss + sorted(s))))
编辑于 2018-04-24 14:07:30 回复(0)
times=map(int,raw_input().split())
numbers=[]
for i in range(10):
    for j in range(times[i]):
        numbers.append(i)
numbers.sort()
for i in range(len(numbers)):
    if numbers[i]!=0:
        numbers=[numbers[i]]+numbers[:i]+numbers[i+1:]
        break
print ''.join(map(str,numbers))

发表于 2018-01-06 11:08:40 回复(0)
arr = input().split()
num = ''
for n in range(1, 10):
    if arr[n] != '0':
        num += str(n)
        arr[n] = str(int(arr[n])-1)
        break
for n in range(10):
    num += str(n) * int(arr[n])
print(num)

编辑于 2017-11-26 23:24:27 回复(0)

python solution:

arr=list(map(int,input().split()))
res=""
if arr[0]!=0:
    for i,v in enumerate(arr):
        if v!=0 and i!=0:
            arr[i]-=1
            res+=str(i)
            break
for i,v in enumerate(arr):
    res+=str(i)*v
print(res)
发表于 2017-10-13 07:57:05 回复(1)

问题信息

难度:
9条回答 19512浏览

热门推荐

通过挑战的用户