移位

· · 题解

欢迎报名洛谷网校,期待和大家一起进步!

本题难点在于进行移位操作。如果我们没有“移位”操作,只输出 ABCD...XYZ,则我们可以书写以下循环。

for (int i = 1; i <= 26; i++) {
    char ch = 'A' + (i - 1);
    cout << ch;
}

现在有了移位操作,则我们写成 char ch = 'A' + (n + i - 1); 就好了吗?且慢,因为 Z 的后一个是 A。这应当如何处理呢?

注意到移了 26 位等于没有移动,移动了 27 位等于移动了 1 位,移动了 52 位也等于没有移动……我们可以想到“取模”运算,即使用模运算简化地完成移位操作:

for (int i = 1; i <= 26; i++) {
    char ch = 'A' + (n + i - 1) % 26;
    cout << ch;
}