字母旋转方阵
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定两个整数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
输入
M为行数,N为列数,其中M,N都为大于0的整数。
输出
分行输出相应的结果,注意每行开始有1个空格,相邻两个字母之间有1个空格。
示例输入
示例输出
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
#include <stdio.h>
#include <string.h>
#define maxn 100
char a[maxn][maxn];
int main()
{
int m,n;
scanf("%d %d", &m, &n);
memset(a,'\0',sizeof(a));
int x, y;
int total = 1;
char digit = 65;
x = 0, y = 0;
a[x][y] = 65;
while(total < m*n){
while(y+1<n&&!a[x][y+1]){
if(digit>=90){
digit = 64;
}
a[x][++y] = ++digit;
++total;
}
while(x+1<m&&!a[x+1][y]){
if(digit>=90){
digit = 64;
}
a[++x][y] = ++digit;
++total;
}
while(y-1>=0&&!a[x][y-1]){
if(digit>=90){
digit = 64;
}
a[x][--y] = ++digit;
++total;
}
while(x-1>=0&&!a[x-1][y]){
if(digit>=90){
digit = 64;
}
a[--x][y] = ++digit;
++total;
}
}
for(x = 0;x < m;x++){
for(y = 0;y < n;y++){
printf(" %c",a[x][y]);
}
printf("\n");
}
}