給定旋轉步數 N (1~27) 和字符串 (長度 1~40,含大寫字母、下劃線、句點)。先反轉字符串,再按字母表順序循環右移 N 位。字母表:`A-Z _ .` (28 字符,句點後回到 A)。輸入以 0 結束。
索引:0 1 2 ... 25 26 27 字符:A B C ... Z _ .
移位公式:`newChar = alphabet[(oldIdx + N) % 28]`
#include
#include
const char* ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_.";
int main() {
int n;
char str[50], rev[50];
while (scanf("%d", &n) == 1 && n) {
scanf("%s", str);
int len = strlen(str);
// 1. 反轉
for (int i = 0; i < len; ++i) rev[i] = str[len-1-i];
rev[len] = '\0';
// 2. 移位
for (int i = 0; i < len; ++i) {
const char* pos = strchr(ALPHABET, rev[i]);
int idx = pos - ALPHABET;
rev[i] = ALPHABET[(idx + n) % 28];
}
printf("%s\n", rev);
}
return 0;
}
輸入:1 ABCD 反轉:DCBA 移位:E D C B (D→E, C→D, B→C, A→B) 輸出:EDCB ✓ 輸入:3 YO_THERE. 反轉:.EREHT_OY 移位:C H U H K W B R . 輸出:CHUHKWBR. ✓