给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。例如,当M=5,N=8时,矩阵中的内容如下:
A B C D E F G H V W X Y Z A B I U J K L M N C J T I H G F E D K S R Q P O N M L
Input
M为行数,N为列数,其中M,N都为大于0的整数。
Output
分行输出相应的结果
Sample Input
4 9
Sample Output
A B C D E F G H I V W X Y Z A B C J U J I H G F E D K T S R Q P O N M L
思路:暴力模拟。
注意事项:
1. 上边界一定要比下边界小,左边界一定要比右边界小。
2.输出格式为每个字母前有三个空格(PE了好多次才改对)
#include<stdio.h>
#include<iostream>
using namespace std;
char p[100][100];
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int s=0,x=m-1,z=0,y=n-1,i,j,count=0;
for(i=0,j=0;count<m*n;)
{
p[i][j]=65+count%26; //为对应位置赋值,利用取余运算实现循环赋值26个字母
count++; //计数 作用: 退出条件 赋值
if(i==s&&j<y)
{
j++;
if(j==y&&(s+1)<x) s++;
}
else if(j==y&&i<x)
{
i++;
if(i==x&&(y-1)>z) y--;
}
else if(i==x&&j>z)
{
j--;
if(j==z&&(x-1)>s) x--;
}
else if(j==z&&i>s)
{
i--;
if(i==s&&(z+1)<y) z++;
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf(" %c",p[i][j]); //输出格式为每个字母前面三个空格
}
printf("\n",p[i][j]);
}
return 0;
}