可能这道题太简单了,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;
}