原题链接🔗 【21python能力赛】尽可能大的数

关于这道《尽可能大的数》,我个人认为它的测试点(5个)不够具体充分,有些代码虽然没有完全正确,但这5个测试点仍然能够通过。

这道题,AC的做法(借鉴了ymx同志的方法)如下: (Python)

n = int(input())
l = input().split()
l.sort(reverse=True)
for i in l:
    print(i,end='')

代码本身很好理解,利用字符串的大小来进行排序,但是在下述这种情况下,代码似乎不能给出正确答案。

当测试数据中存在类似于“90”和“9”的情况下。990显然是大于909的,但是根据字符串的大小,“90”大于“9”,此时输出为“909”,而不是“990”。因此上面所提供的AC代码,并不足够完美。

而上述代码之所以能够AC,想必是因为这5个测试点并没有包含我所提到的错误情况,我希望题目提供者LaoShui能够完善一下测试点。

同时,我也希望各位同学帮忙提供更加完美的代码,评论在 该讨论下方,谢谢🙏

1 条评论

  • @ 2023-11-30 13:01:44
    n=int(input())
    l=list(map(int,input().split()))
    ss=""
    for i in range(len(l)):
        a=0
        b=l[0]
        for i in l:
            if i*(10**(len(l)-len(str(i))))>a:
                a=i*(10**(len(l)-len(str(i))))
                b=i
        l.remove(b)
        ss+=str(b)
    print(ss)
    

    语文课上想的,受到了贪心算法的影响,一遍AC5

    • @ 2023-11-30 13:09:12

      这个9 90 是对的,90 9输出的就是错的,太恶心了

    • @ 2023-12-2 20:49:38

      @我有想过这个顺序问题,最好是能用纯数学的方法来做,寻找一下有没有什么数学方法,用字符串就比较 难以判断

  • 1

信息

ID
1844
时间
ms
内存
MiB
难度
8
标签
递交数
25
已通过
6
上传者