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燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP