pzhongli 2022-09-18 02:04 采纳率: 71.4%
浏览 46
已结题

越界和排序逻辑问题(洛谷P1059)

题目:洛谷P1059

img

下面是去重程序

img

但是这样运行时出现了越界问题

img

!提问1:为什么会越界?应该怎么解决?!

然后我换了种写法,绕开了越界(还是不知道为什么)

img

但是这样写,逻辑上有问题,运行结果如下

img

!提问2:为什么逻辑有问题?应该怎么解决?!

还有就是,_!有不用set和sort的Python3解法吗?_

谢谢!

补充:我将第二个循环改成了冒泡排序,但是仍有逻辑问题。请帮忙解决!

img

  • 写回答

2条回答 默认 最新

  • 梦里逆天 2022-09-18 03:11
    关注

    不用那么麻烦,你可以将列表转为集合set()这样就可以去重了,然后将集合转为列表,并进行排序。越界很可能是因为你用了remove()

    1. n = int(input())
    2. num_list = input().split(' ')
    3. num_list = [int(i) for i in num_list]
    4. # print(num_list)
    5. # 转集合
    6. num_list2 = set(num_list)
    7. # 转列表
    8. num_list2 = list(num_list2)
    9. # 排序
    10. num_list2 = sorted(num_list2)
    11. print(len(num_list2))
    12. print(num_list2)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
    pzhongli 2022-09-18 03:20

    能帮我看一下最后补充那个,冒泡排序为什么有逻辑错误吗?我真的觉得没有问题(而且还是模仿的)谢谢你!!

    回复
    梦里逆天 回复 pzhongli 2022-09-18 03:55

    你把number改成len(numbers)试试?

    1. list1 = [1, 5, 3, 6, 2, 9, 16]
    2. for i in range(len(list1)):
    3. for j in range(1, len(list1)):
    4. if list1[j-1] > list1[j]:
    5. list1[j-1], list1[j] = list1[j], list1[j-1]
    6. print(list1)

    1
    回复
    梦里逆天 回复 pzhongli 2022-09-18 04:11

    你需要先把里面的数转成整型,再来排序

    1. n = int(input())
    2. numbers = input().split(' ')
    3. numbers = [int(i) for i in numbers]
    4. list1 = []
    5. for num in numbers:
    6. if num not in list1:
    7. list1.append(num)
    8. # print(list1)
    9. for i in range(len(list1)):
    10. for j in range(1, len(list1)):
    11. if list1[j-1] > list1[j]:
    12. list1[j-1], list1[j] = list1[j], list1[j-1]
    13. print(list1)
    14. print(len(list1))
    15. print(' '.join(str(i) for i in list1))

    1
    回复
    展开全部5条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月18日
  • 已采纳回答 9月18日
  • 修改了问题 9月18日
  • 创建了问题 9月18日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部