背景
- 在使用Pyhton 解决[PAT].1005 过程中,由于细节处理不当导致测试点0、1、4全部错误,最终仅得到5分!
- 细节决定成败!
题目描述
- 问题具体描述可以参考图 1-1,也可以点击这里查看原址。
解决思路 [NEW]
- 返回计算中间值函数
- 在 待验证的正整数
- 格式化转换、排序、输出
- 注意,将字符串类型的剩余正整数集合进行排序得到的结果是不正确的(数值排序)。
提交结果(5分)
'''
1 返回覆盖集合
'''
def get_cover(nums):
tmp=[]
while True: # 失误,处理公式不正确
if nums==1:
break
nums=nums//2 if nums%2==0 else (nums*3+1)//2
tmp.append(nums)
return set(tmp)
nums=int(input()) # 2 读入数据
while nums: # 3 遍历计算覆盖值取差集
num_strs=input().split(' ')
result=set([int(num) for num in num_strs])
for num in num_strs:
covers=get_cover(int(num))
result=result.difference(covers)
nums-=1
result=[str(val) for val in result]
result.sort(reverse=True)
print (' '.join(result))
提交结果(25分)
def get_cover(nums): # 1 返回覆盖集合
tmp=[]
while True: # 失误,处理公式不正确
if nums==1:
tmp.append(1)
break
nums=nums//2 if nums%2==0 else (nums*3+1)//2
tmp.append(nums)
return set(tmp)
nums=int(input()) # 2 读入数据
while nums: # 3 遍历计算覆盖值取差集
num_strs=input().split(' ')
result=set([int(num) for num in num_strs])
for num in num_strs:
covers=get_cover(int(num))
result=result.difference(covers)
nums-=1
result=list(result)
result.sort(reverse=True)
result=[str(val) for val in result]
print (' '.join(result))
结果分析
- 很明显,对比前后提交的代码也就只有最后4
- 另外,一开始面对提交结果时,自己也比较困惑问题出在了哪里,搜索了一些答案,差不多都是小巫见大巫吧,几乎没有清晰、透彻的分析。
排查问题
- 其实也不用多说,方法大家都(mai)知(guan)道(zi)。
- 提交前
- 多次测试!
- 多次测试!
- 多次测试!
e.g.
# 造测试案例
import random
for i in range(0,5):
ns=random.randint(1,30)
print (ns,' '.join([str(random.randint(1,100)) for i in range(0,ns)]))
# 测试数据集
22 57 35 99 26 20 11 35 61 70 30 5 88 41 78 78 3 36 38 88 81 83 71
30 28 25 49 86 97 70 43 62 18 48 88 29 59 21 34 10 7 83 55 34 57 56 93 63 9 84 54 50 5 35
4 81 27 4 67
16 100 52 60 41 75 83 45 76 92 22 31 41 70 42 48 27
12 98 25 30 3 46 14 33 96 15 40 36 29
- 未提交前,可以使用合适数量的测试案例验证运行结果,然后再提交。
- 提交后,可以参考别人正确的代码,进行运行结果对比,应该就能很快找到原因。
最终结果:
得分 | 用时(ms) | 内存(kb) |
25 | 24 | 3184 |