可能这道题太简单了,Dalao们都没发题解,但是这道题让我想了很久,就写篇题解

#include <iostream>
using namespace std;
int main()
{
    int n;
    while(scanf("%d", &n) != EOF)
    {
        unsigned char op = 'a';    //防止op加的时候爆掉
        for(int i = 1; i <= n * 2 + 1; i++)
        {
            for(int j = 1; j <= n * 2 + 1; j++)
            {
                if(i % 2)   //奇数行递增
                {
                    cout << op;
                    op++;
                }
                else{
                    cout << op;  //偶数行递减
                    op--;
                }
                if(op > 'z') op = op - 26;  //如果比z大了那么回到开头
                if(op < 'a') op = (op + 26);  //如果比a小了那么回到结尾
            }
            cout << endl;
            if(i % 2) op = op + (2 * n) % 26;  //奇数行因为上面j循环多加了一个1,
            //所以只用加2 * n 就行了,但要注意数据和unsigned char最多能装的字节数,模26防止爆掉
            else op = op + (2 * n + 2) % 26;   //偶数行因为j循环减少了一个,所以多加一个2 * n + 2,道理同上
            if(op > 'z') op = op - 26;   //多了就减,少了就加
            if(op < 'a') op = (op + 26);
        }
    }
    return 0;
}