Re: [問題] 我這樣很爛嗎?

看板C_and_CPP作者 (十三)時間11年前 (2012/09/03 20:54), 編輯推噓3(302)
留言5則, 3人參與, 最新討論串6/10 (看更多)
我也只是來討論的。 24時制 先把爭議去掉,可以寫註解算hour是0~23 step1: hour 00 ~ 23 minute 00 ~ 59 step2: [h1 h0]:[m1 m0] h1: 0 ~ 1, 2 h0: 0 ~ 9, 0 ~ 4 m1: 0 ~ 5 m0: 0 ~ 9 step3: h1 算0和算1相同,只跑0再乘以2 h0 分為0和1~9這兩種 m1m0獨立出二個函數,這些函數為 // h0 為 1 ~ 9, h1 是 0, 所以m1 == m0, 取m9表示結果要 * 9 int func_m9(int h1, int h0) { int acc = 0; for(int m1 = 0; m1 <= 5; ++m1) { for(int m0 = 0; m0 <= 9; ++m0) { if(m1 == m0 && (m1 == h0 || m1 == h1)) { ++acc; } } } return acc; } // h0 為 0, h1 也等於 0 int func_m0(int h) { int acc = 0; for(int m1 = 0; m1 <= 5; ++m1) { for(int m0 = 0; m0 <= 9; ++m0) { if(m1 == h || m0 == h) { ++acc; } } } return acc; } step4: h1 = 2 h0 = 2 或 0, 1, 3 m1, m0 程式和step3一樣。 step5: 組合: int ans = (func_m0(0) + func_m9(0, 1) * 9) * 2 + func_m0(2) + func_m9(2, 0) * 3; 注意最後一項是乘以3。 有網友提醒,補上12時制當作補償。 hour 00 ~ 11 minute 00 ~ 59 因為繞了兩圈,最後答案要乘以2。 有了兩個func把題目做出來並不難, 分析道理相同 h1 0, 1 h0 0~9, 0~1 int ans = ( func_m0(0) + func_m9(0, 1) * 9 + func_m0(1) + func_m9(1, 0) ) * 2; 應該吧~ ※ 引述《EdisonX (閉上眼的魚)》之銘言: : 我只是來討論而已。 : ※ 引述《damody (天亮damody)》之銘言: : 這裡我覺得有爭議說,午夜十二點我看過是 12:00 (am) , 也看過 00:00(am)。 : : 這應該可以分成 : : if (a==b) : : { : : if (a==c) : : { : : ... : : } : : else : : { : : ... : : } : : } : : else : : { : : ... : : } : 我大概會偷懶這麼做吧 : int Dig[10] = {0}; : ++Dig[a] ; : ++Dig[b] ; : ++Dig[c] ; : ++Dig[d] ; : if(Dig[c]==3 || Dig[d]==3) Counter+=1; : // Counter = Counter + (Dig[c]==3 || Dig[d]==3); // 看到炫技的就別理它了。 : --------------- : 其實還有加速技巧啦,和 數字謎(不知道什麼叫數字謎大概猜你也沒興趣知道吧) : 的分析方式一樣, : 只是面試那麼短的時候大概不會讓你去想。 : 用最基礎的加速技巧來說 : 拿 ab:cd 來講 : (1) hour 如果兩位數已經相等的話 (a==b) : (1.1) 考量 a=c(d=0~9) 10種狀態, : a=d(c=0~5) 有6種情況 , counter+16 : (1.2) 考量 a=c=d 的情況,多計算一次, counter-1 : (1.3) 這小時已經計算完成了,所以直接跳到下一個小時,也就是 : loop 裡的 x 直接加60。 : (1.4) 所以 hour 兩位數相等的話, counter = counter + 19 : (2) hour 如果兩位數不相等的話 (a!=b) : (2.1) 考量 a=c 且 a=d,只有一種情況, counter+1 : (2.2) 再考量 b=c 且 b=d ,也只有一種情況,counter+1 : 但值得注意的是當 b=6~9 的時候,b=c 這一定不成立, :      所以 counter 必須視條件 +1。   : (2.3) 這小時算完了,counter = counter + 1 + (b<6) , : 直接跳到下一個小時,loopo 裡的 x 直接加60。 : 上面歸納的結果其實已經可以用筆算算出來了。 : 即使使用 loop , 原本要算 720 次的東西, : 上面的跑法其實只要跑 hour , 1~24 或 0~23 就行了。 : 這題個人覺得沒什麼技巧性就是了, : 只是題目好像比較看重設計的架構和概念。 : Yn=Xn^2-Xn-1*Xn+1 : 這題我反而看不出題目是要怎樣搞, : 大概真的是要弄成 Y[n] = X[n]*X[n] - X[n-1]*X[n+1] 吧 :            誰沒菜過? : 我面試也常收無聲卡,會當場打槍你的那才是好事, : 至少不會讓你死得不明不白。 : : 沒錯,太新了 : : 感覺就是沒看什麼書,網路上一些教學文章看過 : : 練過幾個小程式就想來面試 : ^^^^^^^^^^^^^^^^^^^^^^^^ : 我每次去面試都有這種 fu. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.177.97

09/03 21:15, , 1F
第一題有寫明是12‐hr digital clock 不是24- hr
09/03 21:15, 1F

09/03 21:35, , 2F
先推 bleed1979, 敘述有條理且清析。@TsinTa : 原題是寫
09/03 21:35, 2F

09/03 21:36, , 3F
" How many times in one day (24hrs) ",這在原題看得到.
09/03 21:36, 3F

09/03 21:41, , 4F
一天有24小時, 但這題的時鐘是12小時的表示法.
09/03 21:41, 4F
※ 編輯: bleed1979 來自: 114.32.177.97 (09/03 21:54)

09/03 23:00, , 5F
太認真了@@" 不推不行
09/03 23:00, 5F
文章代碼(AID): #1GHAX_VL (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1GHAX_VL (C_and_CPP)