鱼C论坛

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

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

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

使用道具 举报

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


解答错误

输入:
  1. [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]
复制代码

输出:
  1. 998989796959291909089888888878584848383828181879797877777675747373737696767656362626166659585858565553515155555494544444342414141414141404383433303032925242221212021816141412121110111
复制代码

预期结果:
  1. 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()
  1. def solve(nums:list)->int:
  2.     for i in range(len(nums)-1):
  3.         for j in range(i+1,len(nums)):
  4.             a,b = str(nums[i]),str(nums[j])
  5.             if int(a+b) < int(b+a):
  6.                 nums[i],nums[j] = nums[j],nums[i]
  7.     #print('调试',nums)
  8.     res = ''
  9.     for each in nums:
  10.         res += str(each)
  11.     return int(res)
  12. if __name__ == '__main__':
  13.     print('示例1 8423201 输出:',solve([1,20,23,4,8]))
  14.     print('示例1 6654 输出:',solve([4,6,65]))
  15.     print('自测 6664 输出:',solve([66,4,6]))
  16.     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 | 显示全部楼层

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

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

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

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

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

  39. ======================== RESTART: E:\办公\代码\每日一题284.py ========================
  40. 输入为:[1,20,23,4,8]        输出最大整数为:8423201
  41. 输入为:[4,6,65]        输出最大整数为:6654
  42. 输入为:[262,242,29,282,2822]        输出最大整数为:292822822262242
  43. 输入为:[650, 580, 66, 9, 661, 59]        输出最大整数为:66661650595809
  44. 输入为:[2,221]        输出最大整数为:2221
  45. 输入为:[4,6,67]        输出最大整数为:6764
  46. 输入为:[3,0,1]        输出最大整数为:310
  47. 输入为:[0,0,0]        输出最大整数为:0
  48. >>>
复制代码
了下
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
最新学习结果,看看这个怎么样
  1. from functools import cmp_to_key
  2. def fun(s):
  3.     s.sort(key = cmp_to_key(lambda x,y:int(str(x)+str(y))-int(str(y)+str(x))),reverse = True)
  4.     return int(''.join(list(str(i) for i in s)))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我也来发一个:
  1. def fun284(num_list):
  2.     list = []
  3.     reslut = ''
  4.     max_num = max(num_list)
  5.     for num in num_list:
  6.         if len(str(max_num)) == len(str(num)):
  7.             list.append([str(num),0])
  8.         else:
  9.             list.append([str(num)+ str(num)[len(str(num))-1]*(len(str(max_num))-len(str(num))),len(str(max_num))-len(str(num))])
  10.     list.sort(reverse=True)
  11.     for num in list:
  12.         reslut += num[0][0:len(num[0])-num[1]]
  13.     return reslut

  14. #num_list = [1, 20, 23, 4, 8]
  15. #num_list = [4, 6, 65]
  16. #num_list = [4,6,67]
  17. #num_list = [262,242,29,282,2822]
  18. #num_list = [650, 580, 66, 9, 661, 59]
  19. #num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
  20. #num_list = [3577,9155,9352,7911,1622]
  21. 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]
  22. result = int(fun284(num_list))
  23. print(result)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 10:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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