B3844 题解

· · 题解

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

:::align{center} :::

Upd on 2025/2/15:之前写的太草率了,很多人反映看不懂,重新写了全部内容,希望可以帮助大家理解。

\textbf{Solution}

首先在题目中找规律。

考虑行与行之间是独立的,所以可以将每行分开考虑。

P.S.

下面的叙述中,i,j 默认0 开始,即 \texttt{0-indexed}

此外,暂时忽略取模,具体取模过程详见代码。

假设当前正要输出第 i 行,则其开头字母为 (char)(i + 'A')

0n 遍历当前行中的第 j 个字符。

将所有的 + 'A' 提出,就可以得到对于第 j 位,值就是 i+j

当然,i+j 可能会大于 26,所以要对这个值取模。

\textbf{Code}

#include <bits/stdc++.h>

int n;

int main() {
    std::cin >> n;
    for (int i = 0; i < n; ++i) { // 遍历每一行
        for (int j = 0; j < n; ++j) { // 遍历每一列
            std::cout << (char)((i + j) % 26 + 'A'); // 不要忘记要加上 'A'
        }
        std::cout << std::endl;
    }
    return 0;
}