字母旋转游戏
给定两个整数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的整数。
输出:
分行输出相应的结果
样例输入:
4 9
样例输出:
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>
#define RIGHT 1
#define DOWN 2
#define LEFT 3
#define UP 4
int main(void)
{
int i = 0;
int M,N = 0;
int x,y = 0;
scanf("%d %d",&M, &N);
char a[M][N];
int dir = RIGHT;
for (x=0;x<M;x++) {
for (y=0;y<N;y++) {
a[x][y] = 0;
}
}
x = 0;
y = 0;
while (i < M*N) {
a[x][y] = 'A'+ i%26;
if (i+1 == M*N) break;
turn:
switch(dir) {
case RIGHT:
if ((y+1) == N || a[x][y+1] !=0) {
dir = DOWN;
goto turn;
}
y++;break;
case DOWN:
if ((x+1) == M || a[x+1][y] !=0) {
dir = LEFT;
goto turn;
}
x++;break;
case LEFT:
if ((y-1) == -1 || a[x][y-1] !=0) {
dir = UP;
goto turn;
}
y--;break;
case UP:
if ((x-1) == -1 || a[x-1][y] !=0) {
dir = RIGHT;
goto turn;
}
x--;break;
}
i++;
}
x = 0;
y = 0;
for (x=0;x<M;x++) {
for (y=0;y<N;y++) {
printf("%4c",a[x][y]);
}
printf("/n");
}
return 0;
}