1005. 继续(3n+1)猜想(Python)
来源:互联网 发布:手机网络代理ip 编辑:程序博客网 时间:2024/06/14 06:19
背景
- 在使用 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-=1result=[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-=1result=list(result)result.sort(reverse=True)result=[str(val) for val in result]print (' '.join(result))
结果分析
- 很明显,对比前后提交的代码也就只有最后 4 行代码有所不同。可见处理细节是多么重要!
- 另外,一开始面对提交结果时,自己也比较困惑问题出在了哪里,搜索了一些答案,差不多都是小巫见大巫吧,几乎没有清晰、透彻的分析。
排查问题
- 其实也不用多说,方法大家都(mai)知(guan)道(zi)。
- 提交前
- 多次测试!
- 多次测试!
- 多次测试!
e.g.
# 造测试案例import randomfor 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 7130 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 6716 100 52 60 41 75 83 45 76 92 22 31 41 70 42 48 2712 98 25 30 3 46 14 33 96 15 40 36 29
- 未提交前,可以使用合适数量的测试案例验证运行结果,然后再提交。
- 提交后,可以参考别人正确的代码,进行运行结果对比,应该就能很快找到原因。
最终结果:
阅读全文
0 0
- 1005. 继续(3n+1)猜想(Python)
- PAT-B 1005. 继续(3n+1)猜想(python)
- 1005. 继续(3n+1)猜想 (25) python篇
- 1005. 继续(3n+1)猜想 (25) Python 2 编译
- 1005. 继续(3n+1)猜想 (25)
- PAT 1005. 继续(3n+1)猜想
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- PAT 1005. 继续(3n+1)猜想
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005.继续(3n+1)猜想
- 1005. 继续(3n+1)猜想 (25)
- PAT 1005. 继续(3n+1)猜想
- pat 1005. 继续(3n+1)猜想
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想
- Map的四种遍历
- Java中String类里的一些常用方法
- 动态规划-3.9 0-1背包问题
- 从m个数中选择n个数的实现
- goclipse的autoimport(备忘)
- 1005. 继续(3n+1)猜想(Python)
- Unity Shader渲染顺序 坐标系 和光照模型
- android之VideoView和视频播放View的扩展
- (转)区块链:哈希、公钥、私钥、加密、数字签名、数字证书、默克尔树、零知识证明
- 二分图的判断
- Hadoop2.6.0中YARN底层状态机实现分析
- openSMILE语音特征提取
- 常见错误整理 嵌入式linux使用
- shell输入输出重定向(不存在文件会自动创建)