Re: [問題] 我這樣很爛嗎?
我也只是來討論的。
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
09/03 21:15, 1F
推
09/03 21:35, , 2F
09/03 21:35, 2F
→
09/03 21:36, , 3F
09/03 21:36, 3F
推
09/03 21:41, , 4F
09/03 21:41, 4F
※ 編輯: bleed1979 來自: 114.32.177.97 (09/03 21:54)
推
09/03 23:00, , 5F
09/03 23:00, 5F
討論串 (同標題文章)