|
參考 題型範例 - 全國高級中等學校技藝競賽平台 工業類
題目:解密碼演算法
問題描述
有一個簡易密碼演算法可以將一段長度為 5 的字串,編碼成 5 個 32 bits 十六進制的數值,例如:輸入 apple,將會得到 068afa4e 01871c0c 005af200 00160ecc 000553e6。相反的,給你 5 個 32 bits 十六進制的數值,請你解答原來的字串,也就是說給你 068afa4e 01871c0c 005af200 00160ecc 000553e6,你必須解密碼得到原來的字串 apple。
Algorithm: 簡易密碼演算法 |
Input: M[0..4]: 五個字元
Output: 五個 32 bits 的十六進制數值
/*0x 開頭表示該數值為 16 進制的數值*/
- h0⬅︎0xabcd, h1⬅︎0xcdef, h2⬅︎0x2266, h3⬅︎0xceed, h4⬅︎0xaccd;
- a⬅︎h0, b⬅︎h1, c⬅︎h2, d⬅︎h3, e⬅︎h4;
- for i⬅︎0 to 4 do
- word[i] = M[i] - ' ';//減空白字元
- f⬅︎b + c; k⬅︎0x5a82;
- temp⬅︎4*a + f + e + k + word[i];
- e⬅︎d; d⬅︎c; c⬅︎b; b⬅︎a; a⬅︎temp;
- end for
- h0⬅︎h0 + a; h1⬅︎h1 + b; h2⬅︎h2 + c; h3⬅︎h3 + d; h4⬅︎h4 + e;//輸出 5 個 32bits 的結果
- printf("%08x %08x %08x %08x %08x\n", h0, h1, h2, h3, h4);
|
注意事項:
1. 所有變數都是 32bits 無號數
2. 輸入字串 M 長度為 5
3. 第四行將每一個字元 M[i]透過減掉空白字元,轉換成整數數值,並儲存在 word[i]裡面
|
- 輸入說明:輸入含有多組測試資料。每組測試資料為 5 個 32 bits 十六進制的數值,數值之間以空白隔開。請參考範例輸入。
- 範例輸入
068afa4e 01871c0c 005af200 00160ecc 000553e6
068b0621 01871ecd 005af2a6 00160ef5 000553ef
068b0bfc 01872028 005af2f4 00160f07 000553f5
- 輸出說明:輸出長度為 5 的字串
- 範例輸出
apple juice point
A. 評分標準:
1 介面不拘,可以輸入測試資料並輸出結果即可。2 考測試資料如上三組,評審會測試其它多組資料,測試資料皆正確,才能通過。
輸入格式 | 輸出格式 |
輸入含有多組測試資料。每組測試資料為 5 個 32 bits 十六進制的數值,數值之間以空白隔開。
|
輸出長度為 5 的字串
|
範例一 |
輸入 | 正確輸出 |
068afa4e 01871c0c 005af200 00160ecc 000553e6
|
apple
|
執行結果
範例二 |
輸入 | 正確輸出 |
068b0621 01871ecd 005af2a6 00160ef5 000553ef
|
juice
|
執行結果
範例三 |
輸入 | 正確輸出 |
068b0bfc 01872028 005af2f4 00160f07 000553f5
|
point
|
執行結果
程式碼下載 程式碼下載(含編碼)
|