0828华为刷题:明明的随机数

01 题目如下:

在这里插入图片描述在这里插入图片描述

02 第一次编程:错误理解了题目意思

题目中有一句:同一个测试用例里可能会有多组数据,希望大家能正确处理

这句话对我产生了很大的误导,我以为是系统输入一次性输入多个测试用例,我们需要将多个测试用例的“学生号码”进行去重排序。

所以,一开始我的思路是这样的:

(1)第一步,先将系统所有输入读取,放入列表
(2)第二步,找出随机整数个数的标记index
(3)去除该index位置的值,得到新的列表
(4)将新的列表,转成set去重,再转成list排序即可

因此,代码如下:

import sys
# 第一步
lines = sys.stdin.readlines()
lines = [int(line.strip()) for line in lines]
num_list = lines.copy()
num_index = []
num_len = len(num_list)
n=0
# 第二步
while n<num_len:
    num_index.append(n)
    n = n+1+num_list[n]
# 第三步
for i in num_index:
    del num_list[i]
# 第四步
num_list = list(set(num_list))
num_list.sort(reverse = False)
for i in num_list:
    print(i)

错误原因同一个测试用例里可能会有多组数据,希望大家能正确处理。意思是,这组测试用例是多行输入的,并不是上述理解方式。

03 第二次编程:修改代码

(1)每次读取一个值,第一次读取的即为随机数的个数
(2)根据随机数个数,循环读取每一个学生号码,获得一个list
(3)同样,利用set去重,再转成list排序
(4)循环读取每一个测试样例,直到读取完毕

因此,代码如下:

import sys
while True:
    try:
        num_count = int(sys.stdin.readline())
        stu_list = []
        for i in range(num_count):
            stu_list.append(int(sys.stdin.readline()))
        stu_list = list(set(stu_list))
        stu_list.sort(reverse = False)
        for each in stu_list:
            print(each)
    except:
        break

当然,代码还可以进一步优化!!

在循环读取学生号码的时候,可以直接将学生号码直接加到set中,省去一个步骤。

代码如下:

import sys
while True:
    try:
        num_count = int(sys.stdin.readline())
        stu_list = set()  # 注意set的声明
        for i in range(num_count):
        # set使用add方法添加数据
            stu_list.add(int(sys.stdin.readline()))
        stu_list = list(stu_list)
        stu_list.sort(reverse = False)
        for each in stu_list:
            print(each)
    except:
        break

04 注意:

  • set的声明
stu_list = set()
  • set添加数据:add()

stu_list.add(num)

05 别人用input()读取输入的代码

while True:
    try:
        nums_count = int(input())
        nums = set()
        for i in range(nums_count):
            nums.add(int(input()))
 
        nums = sorted(list(nums))
        for each in nums:
            print(each)
 
    except:
        break
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值