Soft_Job 板


LINE

举个我认为不必多加else的case given n, 计算1~n当中哪个数的因数最多, 可用int CountDivisor(int x)会传回x有几个因数. int MostDivisor(int n) { int ans=1, max=1; int i; if(n<1) { return -1; //unexpected input }else { for(i=1; i<=n; i++) { if(CountDivisor(i)>max) { ans=i; max=CountDivisor(i); } } } return ans; } 先不要计较CountDivisor被叫了两次之类我的写法不好的问题. 这pattern是: "sequentially看过所有可能并且找出最大值" 找最大值这件事情就会有上面这段code里面蓝色底黑字的那个if 这里我认为没有必要加上else, 因为他的语意本来就是只有在找到更大的值的时候 update资讯, 没有找到更大的值的时候当然什麽也不做. 要严谨, 你可以在loop里面或if里面加上assertion, 可以在if里面print debug message. 加上一个空的else能帮助我什麽呢? --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.226.5
1F:推 ledia:max = max2(max, CountDivisor(i)); 12/28 11:18
2F:→ neutrino:XD 12/28 11:21
3F:→ neutrino:楼上.....这离题了吧而且这样不知道到底是哪一项是max, 12/28 11:23
4F:→ neutrino:只知道max多少 12/28 11:23
5F:推 ledia:我的确是来乱的 XD 12/28 11:24
6F:→ ledia:在这里认真就输了.... Orz 12/28 11:24
7F:→ neutrino:而且你用macro的话, preproccesor展开他还是被叫两次... 12/28 11:26
8F:推 ledia:你好认真喔 .. Orz 不能用 inline function 吗? 12/28 11:28
9F:推 Axcic:很少看到有人if-else是这样缩排的.. 12/28 12:01
10F:推 chiahsiang:没有找到更大的值的时候当然什麽也不做 这句就是else 12/28 12:02
11F:→ neutrino:那加上else可以有什麽帮助? 12/28 12:04
12F:→ chiahsiang:连中文语意都有else了.你的观点只是空的所以不用写罢了 12/28 12:04
13F:→ chiahsiang:如果你确定code永远是你在maintain.我觉得不加fine 12/28 12:04
14F:→ chiahsiang:但以写HDL的人来说..加不加else会变成不同的电路 12/28 12:05
15F:推 iincho:如果不用写else就表示有else, 那为什麽会有没写的问题XD? 12/28 12:05
16F:→ chiahsiang:人的思考逻辑的确是灵活的..你知道为什麽不加 12/28 12:05
17F:→ iincho:你不能拿某种语言的特性来类比一般原则, 这是过度推论啊-_- 12/28 12:06
18F:→ chiahsiang:程式码是给电脑跑的.电脑的逻辑却是follow build rule 12/28 12:06
19F:→ chiahsiang:我没有过度推论也没说"一定要加" 你延伸想太多了哦 12/28 12:07
20F:→ chiahsiang:我再强调一次我的观点..我不反对不加else 12/28 12:08
21F:→ chiahsiang:但用人的思考逻辑去套用CPU的思考模式应该不是正确的 12/28 12:08
22F:推 iincho:那要问问发文的是不是这样想啦........ 12/28 12:08
23F:推 kerickuo:所以有的时候,别人的吹毛求疵不一定不是专业。 12/28 12:09
24F:→ kerickuo:例如大部分人不用考虑 CPU 的 instruction set 12/28 12:10
25F:→ kerickuo:不代表这件事完全不用考虑… 12/28 12:10
26F:→ chiahsiang:我觉得这没什麽好争的人家公司要加有他的考量在 12/28 12:10
27F:→ neutrino:发文那个不是javascript吗? jsp的if statement和if-else 12/28 12:11
28F:→ neutrino:statement没有verilog里这种区别吧 12/28 12:11
29F:推 chiahsiang:我相信不管任何程式都是经过CPU运算 12/28 12:12
30F:→ chiahsiang:我个人倾向尊重看似聪明却一板一眼的CPU 12/28 12:13
31F:→ neutrino:..... 如果在写assembly那我当然要考虑用哪种方式branch 12/28 12:14
32F:→ neutrino:甚至比较常发生的case要摆在if 还是摆在else 都要考虑 12/28 12:14
33F:→ neutrino:可是 我来查查C++ Coding Standards - 101 Rules, Guide- 12/28 12:15
34F:→ neutrino:lines, and Best Practices里相关的说法... 12/28 12:16
35F:推 luciferii:我突然很想推一句话:「jsp不是javascript...」XD 12/28 12:16
36F:→ neutrino:嘎 抱歉 我承认我只会C 12/28 12:20
37F:推 luciferii:顺问一下,CountDivisor会不会因为i过大而return null? 12/28 12:20
38F:推 kerickuo:记得是 depend on compiler implementation 12/28 12:22
39F:→ neutrino:(1)看CountDivisor怎麽设计(2)对正整数n,他的因数个数必 12/28 12:23
40F:→ neutrino:<=n 12/28 12:23
41F:推 luciferii:(1)要如何确保不是CountDivisor出问题(2)n可能已经溢位 12/28 12:26
42F:→ luciferii:,这样的思考逻辑就无法确保。 12/28 12:27
43F:→ luciferii:或者,若CountDivisor也有可能在异常下 return -1 12/28 12:27
44F:→ luciferii:则如何判断是n造成,还是CountDivisor造成? 12/28 12:28
45F:→ neutrino:这个程式要怎麽refine refactory空间很大, 但是在if後面 12/28 12:29
46F:→ neutrino:加else能解决楼上这个问题吗? 12/28 12:29
47F:→ neutrino:你可以在for loop里面print CountDivisor(i)出来... 12/28 12:30
48F:推 luciferii:其实还要考虑你环境里软硬体可能还有浮点计算错误的问题 12/28 12:32
49F:→ luciferii:防错处理不能帮你解决,只是在万一真的发生时, 12/28 12:33
50F:→ luciferii:能让你意识到这个点可能有问题。 12/28 12:33
51F:→ neutrino:每个函数自己要把自己范围内的事情顾好 在这个函数里n没 12/28 12:34
52F:→ neutrino:被动过, i只是iterator, 会不会溢位无从得知要看caller 12/28 12:34
53F:→ luciferii:for loop里print debug也是种作法,但是本例里习惯上就 12/28 12:34
54F:→ neutrino:每个人写的unit要自己作好测试才是根本 12/28 12:35
55F:→ luciferii:是没有。不管是print debug或 with else,当你没有这种 12/28 12:35
56F:→ luciferii:习惯,就不应该宣称这种习惯是多余的 12/28 12:36
57F:→ neutrino:不用挑我没加debug message来说我没有这种习惯 我只是要 12/28 12:36
58F:→ neutrino:举出这个pattern来 难道我要扩充到两页长的完整code 12/28 12:37
59F:→ neutrino:我的问题很简单 你说的议题都很重要我跟你立场相同 但是 12/28 12:37
60F:→ neutrino:这个case里面 这个if後面加上空else可以带来的帮助我不懂 12/28 12:38
61F:→ luciferii:如果CountDivisor不是你写的,就不要对它太有自信 12/28 12:38
62F:→ neutrino:所以愿闻其详 12/28 12:38
63F:推 luciferii:不是要加上空的else,加上else当然是要作点事情 12/28 12:40
64F:→ luciferii:你讲的print debug 不就是? 12/28 12:41
65F:→ neutrino:那要print什麽出来 是只有在else的case才有必要print的? 12/28 12:42
66F:→ neutrino:loop一进来就可以print了 12/28 12:42
67F:推 ykjiang:这个例子用 assertion 就可以了 12/28 13:15







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP