AOJを解く part2
problem 2508:
暗号化された文字列を鍵にしたがって復号せよ
//暗号化された文字列
ABC
//復号鍵
1 2 3
//解読された文字列
'A'-1 'B'-2 'C'-3 → zzz
ルールは細かいので問題はAOJでご覧下さい.
Aizu Online Judge -problem 2508
#include<stdio.h> int main() { int n, i, j; while((scanf("%d", &n)!=EOF) && n){ int key[100] = {}; char s[100] = {}; char ans[100] = {}; for(i = 0; i < n; i++) scanf("%d", &key[i]); for(i = n; i < 100; i++) key[i] = key[i%n]; scanf("%s", s); for(i = 0; i < 100; i++) if(s[i]!='\0') ans[i] = s[i]; for(i = 0; i < 100; i++) { if(s[i] == '\0') break; for(j = 0; j < key[i]; j++) { if(ans[i] == 'a') ans[i] = 'Z'; else if(ans[i] == 'A') ans[i] = 'z'; else ans[i]--; } } printf("%s\n", ans); } return 0; }
-
手順としては,
- 鍵の個数を入力させ,EOFもしくは0の場合に終了する
- 鍵の配列を生成し,100個の要素を確保する
- 鍵の個数がn個だった場合,鍵の要素番号0~n-1に鍵をそれぞれ入れ,
n~2n-1, 2n~3n-1,...にも同じパターンを繰り返す
例えば,n=3, 鍵のパターンは3,2,1だった場合,key[0] [1] [2] [3] ... [99] 3 2 1 3 ... 3 - 解読結果格納配列ansに暗号化されている文字列sを入れておき,
keyにしたがって,引き算します.
'a'のとき,引くと'Z', 'A'のとき,引くと'z'になる点に注意です. - ansを表示し,終了