Download presentation
Presentation is loading. Please wait.
Published byMarilyn McDowell Modified 5年之前
1
TOI推廣計畫 解題-解密情書 Icon made by [
2
默默喜歡著雯雯很久的阿遠,遲遲不敢向對方表達心意。不主動傳訊息給對方怕被當變態、面對面時因爲雯雯太可愛會害羞講不出話,一直沒有行動的阿遠發現最近雯雯的身邊有其他異性的存在,因此就算使出渾身解術都要讓對方明白自己的心意,進行愛的告白! 阿遠想到了一個進可攻、退可守的策略:給雯雯一封加密過的信件,內容是用凱薩密碼加密過後的情書。但其實這一切都在雯雯的掌握中,她也喜歡阿遠,所以才故意安排異性好友在身邊設法讓阿遠告白,雯雯已經等不及要解開信件上的內容了! 「凱薩密碼」:明文中的所有字母都在字母表上向後、或向前位移,按照一個固定數目進行偏移後被替換成密文。雯雯已知加密後信件中一定有Love或love這個字,且只需解密英文字母,請幫她找出最少向後位移量k快速解密情書的內容,接受阿遠的告白! 題 目
3
輸入格式 有一個字串S (1 S 1000),代表加密過的情書內容。字串S包含大小寫英文字母、符號、空白,讀到換行時停止輸入。 輸出格式 僅輸出一個正整數,代表密文解密後最少偏移量k (0 k 25),使字串中包含Love或love的凱薩密碼。 輸入範例 F ilsb vlr. 輸出範例 3 (解密後:I love you.)
4
1. 字串讀取 字元陣列讀取 2. 字串處理 字串位移比對
解題重點: 1. 字串讀取 字元陣列讀取 2. 字串處理 字串位移比對 Icon made by [ from
5
1.字串讀取 字元陣列讀取 Icon made by [ from
6
1. 字元陣列讀取 字元陣列操作: 創立陣列(字串S (1 S 1000) ) 讀取字元直到換行
char *fgets(char *str, int n, FILE *stream) 讀取指定的一行,並將其存儲到由str指向的字串。 當讀到換行或是超過最大字串長度停止讀取! 儲存字串 最大字串長度 標準輸入
7
2. 字串處理 字串位移、比對 Icon made by [ from
8
2. 字串處理 字串位移: 明文--------- 密文--------- 凱薩密碼
2. 字串處理 字串位移: 凱薩密碼 明文中的所有字母都在字母表上向後、或向前位移,按照一個固定數目進 行偏移後被替換成密文。 明文 位移 k = 4 密文
9
2. 字串處理 字串位移: 已有加密後密文,要求解密後明文 ‘Z’ + 4 ≠ ‘C’ 如果 位移 k 後超過‘Z’, 則回到‘A’
‘A’ = ‘D’ ‘Z’ ≠ ‘C’ 位移 k = 4 如果 位移 k 後超過‘Z’, 則回到‘A’ if ( ( 密文 + k ) > ‘Z’ ) 明文 = ( k - ( ‘Z’ - 密文 + 1 ) ) + ‘A’ ; else 明文 = 密文 + k ;
10
2. 字串處理 字串位移:(因要測試不同位移k,所以須將密文保存,暫存解密後明文。) 暫存陣列 區分英文字 區分英文字大小寫
判斷位移後超過‘Z ’or‘z ’ 要從‘A ’or‘a ’繼續位移 (3) 字串位移 if ( ( 密文 + k ) > ‘Z’ ) 明文 = ( k - ( ‘Z’ - 密文 + 1 ) ) + ‘A’ ; else 明文 = 密文 + k ;
11
2. 字串處理 字串比對: (1) 從解密後明文:找到Love、love
回傳值 indicates <0 str1 < str2 str1 = str2 >0 str1 > str2 2. 字串處理 字串比對: (1) 從解密後明文:找到Love、love int strncmp (const char *s1, const char *s2, size_t n); 比較n個字元 找到Love 、love 跳出迴圈
12
3. 範例程式 1 2 3
13
3. 範例程式 1 2 3
Similar presentations