蛇形矩阵
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 489 测试通过 : 68
总提交 : 489 测试通过 : 68
比赛描述
给定两个整数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为列数,其中0<M,N<100。
输出
输出相应的矩阵,每个字母占4列,即每一个字母前面有三个空格。
样例输入
6 3
样例输出
A B C
N O D
M Q E
L R F
K P G
J I H
提示
题目来源
李鸿斌(honghu)
#include<iostream>
using namespace std;
int main(){
char c[100][100]={0},a='A',i=0,j=0,dir;
int m,n,temp_m,temp_n;
scanf("%d %d",&m,&n);
temp_m = m-1;
temp_n = n;
dir = 0;
while(c[i][j]==0 && temp_n && temp_m){
c[i][j] = a;
if(++a>'Z'){
a = 'A';
}
switch(dir){
case 0: //右
if(j+1<n && c[i][j+1]==0){
++j;
}else{
++i;
--temp_n;
dir = 1;
}
break;
case 1: //下
if(i+1<m && c[i+1][j]==0){
++i;
}else{
--j;
--temp_m;
dir = 2;
}
break;
case 2: //左
if(j-1>=0 && c[i][j-1]==0){
--j;
}else{
--i;
--temp_n;
dir = 3;
}
break;
case 3: //上
if(i-1>=0 && c[i-1][j]==0){
--i;
}else{
++j;
--temp_m;
dir = 0;
}
break;
}
}
if(temp_m==0){
if(dir==0){
while(j<n && c[i][j]==0){
c[i][j] = a;
if(++a>'Z'){
a = 'A';
}
++j;
}
}else{
while(j>=0 && c[i][j]==0){
c[i][j] = a;
if(++a>'Z'){
a = 'A';
}
--j;
}
}
}
while(temp_m){
switch(dir){
case 1: //下
while(i+1<m && c[i+1][j]==0){
++i;
}
dir = 3;
--temp_m;
break;
case 3: //上
while(i-1>=0 && c[i-1][j]==0){
--i;
}
dir = 1;
--temp_m;
break;
}
c[i][j] = a;
if(++a>'Z'){
a = 'A';
}
}
for(i=0;i<m;++i){
for(j=0;j<n;++j){
printf(" %c",c[i][j]);
}
putchar('\n');
}
}