Codebar 程式酒吧

一座輕鬆學習程式的酒吧

0%

a009. 解碼器

題目連結

https://zerojudge.tw/ShowProblem?problemid=a009

解題思路

ASCII碼全名為「American Standard Code for Information Interchange」,中文為「美國信息交換標準代碼」。之所以會有這個代碼是因為電腦採用的是二進制,八進制、十進制的其他數字,或甚至英文字母,必須經由此代碼轉換為二進制後,電腦才能順利理解、顯示、運算。
以C語言來說,當電腦進行字元與整數的運算時,會自動將該字元轉為ASCII碼再與整數運算,運算完成後再轉成字元。因此,所謂「把明碼的每個字元加上某一個整數K而得到密碼的字元」,指的是將明碼所對應到的ASCII碼加上某一個整數K,再轉為字串得到密碼。

透過觀察範例輸入/出可知,1經過轉換後會變成*,查表可得K值為-7。因此,我們先使用scanf()函式讀取輸入的明碼,存放到字元陣列arr,再將陣列內的元素逐一減七,就是題目所求的密碼了。

注意事項

本題中使用了strlen()函式取出字串長度。由於strlen()函式並非標準函式庫裡的函式,使用前須先引用 <string.h> 函式庫。

程式碼:C語言

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <string.h>
int main() {
//以字元陣列的形式宣告,並以字串的形式讀取輸入的明碼
char arr[1000];
scanf("%s", arr);
//利用for迴圈,逐項將明碼轉為密碼
for(int i = 0 ; i < strlen(arr) ; i++)
arr[i] = arr[i]-7;
printf("%s", arr);
return 0;
}