/*
Problem E: 字母旋转游戏
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 1960 Accepted: 689
Description
给定两个整数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
*/
#include <stdio.h>
#include <malloc.h>
void printArray(char *a,int M,int N)
{
int i,j;
for(i=0; i<M; i++)
{
for(j=0; j<N; j++) printf("%4c",a[i*N+j]);
printf("\n");
}
}
void getArray(int M,int N)
{
#define Val(ch) ch++;if(ch>'Z') ch='A';
#define A(row,col) arr[row*N+col]
#define Test() //printArray(arr,M,N);printf("\n");
char *arr=(char *)malloc(M*N*sizeof(char));
char ch='A';
int m=0,n=0;
int x=M-1,y=N-1;
while(m<x && n<y)//能转圈
{
int row=m,col=n;
while(col<y)
{
A(row,col)=Val(ch);
col++;
}
Test();
while(row<x)
{
A(row,col)=Val(ch);
row++;
}
Test();
while(col>n)
{
A(row,col)=Val(ch);
col--;
}
Test();
while(row>m)
{
A(row,col)=Val(ch);
row--;
}
Test();
++m; ++n;
x--; y--;
// printf("%d,%d,%d,%d\n",m,n,x,y);
}
if(n==y && m<=x) while(m<=x){A(m,n)=Val(ch); m++;}//剩一行,
else if(m==x && n<=y) while(n<=y){A(m,n)=Val(ch); n++;}//剩一列
printArray(arr,M,N);
free(arr);
}
int main()
{
int M,N;
L1:
scanf("%d%d",&M,&N);
getArray(M,N);
//goto L1;
return 0;
}
评论0
最新资源