看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《max660865 (原則)》之銘言: : 小弟是c語言初學者,想練習所以上網找了程式競賽的題目看一看 : 問題描述: : 有一個金庫保險箱,外面有一個由五個阿拉伯數字所組成的密碼鎖,設定的密碼也是由這 : 五個數字所組成的,且數字不能重複。保險箱設定密碼之後,若忘了密碼,若要解開此保 : 險箱,若由小到大依序輸入五位數字密碼,請問要輸入幾次才能解開此保險箱。 : 輸入說明: : 例如:金庫密碼鎖是由阿拉伯數字1,2,3,4,5共5個按鍵所組成,金庫密碼設定為12453。 : 今假使我們忘記密碼之後,若要解開金庫,密碼由小到大開始輸入,依序為12345, : 12354, 12435, 12453, 密碼要輸入到第4次才可以解開金庫。 : ------------------------------------------------------------------------------- : 最後發現一組規律24*a+6*b+2*c+1*d+1=所需次數 : a=第一個密碼減1 : 但b,c,d我找不出一個結論= =" : 還是說我的規律根本是錯的?! 可以請問是那題嗎?因為需要驗證我提供的解法。 提供一個情況,12345變成53241需要幾次。 你應該也知道這是階乘關係。 位數 total 1位數 -> 1!次 2位數 -> 2!次 3位數 -> 3!次 所以先看1變到5,5 - 1 = 4,所以後面有4個4!次的變化。 接著把12345的1和5抽掉,把53241的5抽掉。 變成234和3241,再把1加到234形成1234 所以就討論1234變成3241 3 - 1 = 2 --> 2個3!變化 同理抽掉又加回形成討論124和241 2 - 1 = 1 --> 1個2!變化 討論14和41 --> 4 - 1 = 3 但是2和3都用掉了,所以3次 - 用掉的2次 = 1次 (這裡很重要,前面的也要比照辦理要扣掉用掉的) 4 * 24 + 2 * 6 + 1 * 2 + 1 * 1 = 111 方法很rough,但邏輯上應該可以行得通。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.113.144 ※ 編輯: bleed1979 來自: 114.43.113.144 (09/22 22:02)
priv:你的答案好像差1 09/22 22:14
priv:124, 142, 214, 241 是第四組不是第三組 09/22 22:26
priv:原po的答案看起來是對的 09/22 22:26
priv:我說上一篇的原po 09/22 22:26
bleed1979:我就知道有人會問這個問題。我算的是步數,但是題目是 09/22 22:42
bleed1979:連自己也要輸入,所以要加上自己。 09/22 22:43
asadman1523:http://0rz.tw/HIg7a 題目@@? 09/23 00:19