參考 題型範例 - 全國高級中等學校技藝競賽平台 工業類

題目:解密碼演算法


問題描述
有一個簡易密碼演算法可以將一段長度為 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 進制的數值*/
  1. h0⬅︎0xabcd, h1⬅︎0xcdef, h2⬅︎0x2266, h3⬅︎0xceed, h4⬅︎0xaccd;
  2. a⬅︎h0, b⬅︎h1, c⬅︎h2, d⬅︎h3, e⬅︎h4;
  3. for i⬅︎0 to 4 do
  4.      word[i] = M[i] - ' ';//減空白字元
  5.      f⬅︎b + c; k⬅︎0x5a82;
  6.      temp⬅︎4*a + f + e + k + word[i];
  7.      e⬅︎d; d⬅︎c; c⬅︎b; b⬅︎a; a⬅︎temp;
  8. end for
  9. h0⬅︎h0 + a; h1⬅︎h1 + b; h2⬅︎h2 + c; h3⬅︎h3 + d; h4⬅︎h4 + e;//輸出 5 個 32bits 的結果
  10. 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

執行結果


程式碼下載       程式碼下載(含編碼)