鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: zltzlt

[已解决]Python:每日一题 284

[复制链接]
 楼主| 发表于 2019-12-5 20:56:45 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 20:58:03 | 显示全部楼层


解答错误

输入:
[25,5,12,97,3,8,79,73,38,88,98,29,84,74,16,2,67,65,41,44,88,75,51,87,95,90,45,40,7,53,5,30,77,5,56,58,41,51,62,88,33,69,81,78,18,63,82,90,21,6,12,92,67,6,81,83,14,6,76,85,79,96,41,44,20,89,59,58,83,58,73,1,41,41,24,55,61,49,10,42,5,1,98,30,91,9,34,5,84,43,73,4,22,11,21,14,1,62,77,41]
输出:
998989796959291909089888888878584848383828181879797877777675747373737696767656362626166659585858565553515155555494544444342414141414141404383433303032925242221212021816141412121110111
预期结果:
998989796959291909089888888887858484838382818179797877777767574737373696767666656362626159585858565555555535151494544444434241414141414140383433330302925242222121201816141412121111110
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 20:59:10 | 显示全部楼层

输入 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 21:02:39 | 显示全部楼层
zltzlt 发表于 2019-12-5 20:47
解答错误

输入:[0,0]

哦豁,漏掉一个 int()
def solve(nums:list)->int:
    for i in range(len(nums)-1):
        for j in range(i+1,len(nums)):
            a,b = str(nums[i]),str(nums[j])
            if int(a+b) < int(b+a):
                nums[i],nums[j] = nums[j],nums[i]
    #print('调试',nums)
    res = ''
    for each in nums:
        res += str(each)
    return int(res)
if __name__ == '__main__':
    print('示例1 8423201 输出:',solve([1,20,23,4,8]))
    print('示例1 6654 输出:',solve([4,6,65]))
    print('自测 6664 输出:',solve([66,4,6]))
    print('自测 输出:',solve([262,242,29,2822,282]))

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 21:03:06 | 显示全部楼层
闲愚 发表于 2019-12-5 20:06
以上例子均测试无误

输入 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 21:03:45 | 显示全部楼层

恭喜通过!

执行用时:151 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 21:19:51 | 显示全部楼层
zltzlt 发表于 2019-12-5 21:03
输入 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 超时

深度太大了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 22:28:03 | 显示全部楼层
四点好 发表于 2019-12-5 03:12
In [9]: def fun(lst):
   ...:     len1 = len(str(max(lst)))
   ...:     lst2 = [(str(x), str(x ...

怎么不对呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 22:32:01 | 显示全部楼层
阴阳神万物主 发表于 2019-12-4 23:39
我那个数据,输入数据的最后两位交换一下,您这还是错的呢

结果:

是的,这点没有考虑到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-6 13:13:46 | 显示全部楼层

修改
#每日一题文档,旨在练习Pyhon熟练度和提高算法

def fun284(list_Num = [1,2,3],n = 10):
    #n不能小于数组中元素位数最长的值
    '''日期20191204
原文链接:https://fishc.com.cn/forum.php?mod=viewthread&tid=151816&highlight=%C3%BF%C8%D5%D2%BB%CC%E2
今天的题目:
给出一组非负整数,重新排列它们的顺序,把它们组成一个最大的整数。

示例 1:
输入:[1, 20, 23, 4, 8]
输出:8423201

示例 2:
输入:[4, 6, 65]
输出:6654
'''
#该问题只要判断出每个元素的‘大小就可以’
#比较方法是比较最左边的大小,如果相同切有下一位则比较下一位
#该方法比较大小可以通过转换为同一次级10**n,如65和6则转换为65和60
    def buquan(num,len_num = n):
    #将所有整数通过末尾加 原来末尾的最后一位 转换为长度相同的整数
        if num != 0 :
             while num <10**n-1:
                 num  = num * 10 +num%10
        return num
    
    s = ''
    list_Num.sort(key = buquan ,reverse = True)#将数字变为字符串降序
    for i in  list_Num:
        s += str(i)
    return int(s)

                                            
print('输入为:[1,20,23,4,8]\t输出最大整数为:%d'             %(fun284(list_Num = [1,20,23,4,8])) )
print('输入为:[4,6,65]\t输出最大整数为:%d'                  %(fun284(list_Num = [4,6,65])) )
print('输入为:[262,242,29,282,2822]\t输出最大整数为:%d'     %(fun284(list_Num = [262,242,29,282,2822])) )
print('输入为:[650, 580, 66, 9, 661, 59]\t输出最大整数为:%d'%(fun284(list_Num = [650, 580, 66, 9, 661, 59])) )
print('输入为:[2,221]\t输出最大整数为:%d'                   %(fun284(list_Num = [2,221])) )
print('输入为:[4,6,67]\t输出最大整数为:%d'                  %(fun284(list_Num = [4,6,67])) )
print('输入为:[3,0,1]\t输出最大整数为:%d'                  %(fun284(list_Num = [3,0,1])) )
print('输入为:[0,0,0]\t输出最大整数为:%d'                  %(fun284(list_Num = [0,0,0])) )

======================== RESTART: E:\办公\代码\每日一题284.py ========================
输入为:[1,20,23,4,8]        输出最大整数为:8423201
输入为:[4,6,65]        输出最大整数为:6654
输入为:[262,242,29,282,2822]        输出最大整数为:292822822262242
输入为:[650, 580, 66, 9, 661, 59]        输出最大整数为:66661650595809
输入为:[2,221]        输出最大整数为:2221
输入为:[4,6,67]        输出最大整数为:6764
输入为:[3,0,1]        输出最大整数为:310
输入为:[0,0,0]        输出最大整数为:0
>>> 
了下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:43:35 | 显示全部楼层
四点好 发表于 2019-12-5 03:12
In [9]: def fun(lst):
   ...:     len1 = len(str(max(lst)))
   ...:     lst2 = [(str(x), str(x ...

答案哪里错误了?最大值就是123121。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-9 16:31:38 | 显示全部楼层
最新学习结果,看看这个怎么样
from functools import cmp_to_key
def fun(s):
    s.sort(key = cmp_to_key(lambda x,y:int(str(x)+str(y))-int(str(y)+str(x))),reverse = True)
    return int(''.join(list(str(i) for i in s)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-9 22:17:19 | 显示全部楼层
本帖最后由 yile126 于 2019-12-9 22:20 编辑

我也来发一个:
def fun284(num_list):
    list = []
    reslut = ''
    max_num = max(num_list)
    for num in num_list:
        if len(str(max_num)) == len(str(num)):
            list.append([str(num),0])
        else:
            list.append([str(num)+ str(num)[len(str(num))-1]*(len(str(max_num))-len(str(num))),len(str(max_num))-len(str(num))])
    list.sort(reverse=True)
    for num in list:
        reslut += num[0][0:len(num[0])-num[1]]
    return reslut

#num_list = [1, 20, 23, 4, 8]
#num_list = [4, 6, 65]
#num_list = [4,6,67]
#num_list = [262,242,29,282,2822]
#num_list = [650, 580, 66, 9, 661, 59] 
#num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
#num_list = [3577,9155,9352,7911,1622]
num_list = [25,5,12,97,3,8,79,73,38,88,98,29,84,74,16,2,67,65,41,44,88,75,51,87,95,90,45,40,7,53,5,30,77,5,56,58,41,51,62,88,33,69,81,78,18,63,82,90,21,6,12,92,67,6,81,83,14,6,76,85,79,96,41,44,20,89,59,58,83,58,73,1,41,41,24,55,61,49,10,42,5,1,98,30,91,9,34,5,84,43,73,4,22,11,21,14,1,62,77,41]
result = int(fun284(num_list))
print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 16:28:57 | 显示全部楼层

你好,可否解释一下这个代码!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-24 22:31:14 | 显示全部楼层
ouyunfu 发表于 2020-3-23 16:28
你好,可否解释一下这个代码!

好久以前的代码了,写个注释叭
#原题需要最大排列,只需要将大的数放在靠前的数位,那么这些需要
#排进去的数字以 靠前的数字更大 的规则进行排序即可
def solve(nums):
    class CapStr(str):
        #'Cap' 取自 capital
        def __lt__(self, value):
            #魔法方法之 __it__(self, value):
            #           Return self<value
            i = j = 0
            while self[i] == value[j]:
                #处理同一数位相同情况
                if i < len(self)-1:
                    i += 1
                if j < len(value)-1:
                    j += 1
                if i == len(self)-1 and j == len(value)-1:
                    break
            return self[i] < value[j]
    return int(''.join(
        sorted(
            map(lambda x:CapStr(x), nums)
            #把int变成CapStr
            , reverse=True)
        )
               )
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-25 05:38:25 | 显示全部楼层
Unicorn# 发表于 2020-3-24 22:31
好久以前的代码了,写个注释叭

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-24 17:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表