[問題] 新的三個關於演算法的題目

作者: gary771016 (一日測 終身測)   2017-08-20 17:46:21
大家好
我又來了 應該不會有下次了 也就這兩家會這樣考XD
就當作是筆試分享囉~
這次是 80分鐘3題 (看到時有點嚇到 上一家是2.5小時3題)
好險題目比較簡單~
1. 題目好長其實沒有什麼XD
A[0]=1
A[1]=4
A[2]=-1
A[3]=3
A[4]=2
一. A[0]=1 所以下一個index是1
二. A[1]=4 所以下一個index是4
三. A[4]=2 所以下一個index是2
四. A[2]=-1 所以停止
答案為4次 (包含一開始的)
沒有什麼陷阱 只有一開始如果是 A[0]=-1 當然就是1啦~
2. 3/5/7的倍數判斷
輸入N 印出1~N
如果是3的倍數改為a 同理 5則b 7則c
如果同時是3/5的倍數就改為 ab 同理 3/7則ac ...以此類推
假設N=15
輸出:
1
2
a
4
b
a
c
8
a
b
11
a
13
c
ab
新手我本來想說要來用 if/elif/else
但就會想到那張圖(三個圈圈交疊) 要考慮多種情況
靈光一閃 用了個有趣的方法 就秒殺了XD
3. 感覺是用遞迴?
輸入一個數字 會有多種組合 但位數要相同
假設是1114 : 1114 /1141 /1411 /4111 答案為4種 (4!/3!)
假設是100 : 100 /010(X) /001(X) 答案為1種 (0在前就不是三位數了)
假設是1234 : 24種 (4!)
假設是1214 : 12種 (4!/2!)
數字範圍1~99999 應該可以針對幾個位數去做判斷和運算吧?
結果我直接用數學排列組合算
一.先算出所有方法數(包含0在前)
二.然後要扣掉0在前的所有方法數
但數字有些位數會重複 花了好長的時間在處理和判斷 最後只有做到第一步
記得硬繳出答案(即使sample沒過) 還是有一點分數的(拿了50分)
每次對於要排列組合印出所有可能的這類題目都不擅長 是用遞迴嗎?
因為小弟以前大一剛學程式時 教授出的作業難度跳太快了 出了個河內塔 挫折太大了
從此10年不敢碰程式......離題了
總之就這樣囉~
作者: schedule6666 (schedule)   2017-08-20 22:41:00
河內塔真的好難喔>_<
作者: indigolemon (藍色拉拉喵)   2017-08-21 01:31:00
最後一題用 itertools 的permutations,檢查首位數後,add到一個set裡,再return他的數量就好了。
作者: bibo9901 (function(){})()   2017-08-21 02:01:00
最後一題只要算方法數的話 就是你這樣算啊 怎麼會錯?
作者: Django (Cython)   2017-08-21 14:15:00
其實就都是直接硬作而已 還是沒什麼演算法可言啊...
作者: crow1270 (鴉)   2017-08-21 17:35:00
排列組合的問題而已?照原po那樣寫沒錯啊,應該也不用很久吧判斷重複的數字然後用有重複物的排列計算、數字是否有零、零開頭的排列計算 相減?啊 要印出來 抱歉誤會了QQ
作者: eight0 (欸XD)   2017-08-22 09:30:00
作者: alan23273850   2017-08-23 15:37:00
很多教授為了滿足自己的權威,作業都故意出很難,打擊初學者信心,讓人望之卻步,萬萬不可取。還好我從高中就會C了,不然上大學應該也是倒盡胃口

Links booklink

Contact Us: admin [ a t ] ucptt.com