描述
给定两个整数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<M,N<100。
输出
每个测试样例输出相应的矩阵,每个字母占4列,即每一个字母前面有三个空格。
样例输入
样例输出
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int a[110][110]; int n,m,N,i,j,k,z; int ch,fx=0; int fun() { i=j=1; fx=0; ch=0; N=n*m; memset(a,-1,sizeof(a)); a[1][m+1]=1; a[n+1][m]=1; a[n][0]=1; a[0][0]=1; while(N > 0) { if(fx==0) { while(a[i][j]==-1) { a[i][j++]=(ch++)%26; N--; } i++; j--; } else if(fx==1) { while(a[i][j]==-1) { a[i++][j]=(ch++)%26; N--; } i--; j--; } else if(fx==2) { while(a[i][j]==-1) { a[i][j--]=(ch++)%26; N--; } i--; j++; } else if(fx==3) { while(a[i][j]==-1) { a[i--][j]=(ch++)%26; N--; } i++; j++; } fx=(fx+1)%4; } for(i=1;i<=n;i++) { for(j=1;j<m;j++) printf("%4c",char(‘A‘+a[i][j])); printf("%4c\n",char(‘A‘+a[i][j])); } } int fun1() { i=j=1; fx=0; ch=0; N=n*m; memset(a,-1,sizeof(a)); a[1][m+1]=1; a[n+1][m]=1; a[n][0]=1; a[0][0]=1; while(N > n-m) { if(fx==0) { while(a[i][j]==-1) { a[i][j++]=(ch++)%26; N--; } i++; j--; } else if(fx==1) { while(a[i][j]==-1) { a[i++][j]=(ch++)%26; N--; } i--; j--; } else if(fx==2) { while(a[i][j]==-1) { a[i][j--]=(ch++)%26; N--; } i--; j++; } else if(fx==3) { while(a[i][j]==-1) { a[i--][j]=(ch++)%26; N--; } i++; j++; } fx=(fx+1)%4; } while(N>=0) { while(a[i][m/2+1]==-1)i++; if( a[i-1][m/2+1]==-1) a[--i][m/2+1]=(ch++)%26; N--; i--; while(a[i][m/2+1]==-1)i--; if( a[i+1][m/2+1]==-1) a[++i][m/2+1]=(ch++)%26; i++; N--; } for(i=1;i<=n;i++) { for(j=1;j<m;j++) printf("%4c",char(‘A‘+a[i][j])); printf("%4c\n",char(‘A‘+a[i][j])); } } int main() { while(cin>>n>>m) { if(n>m&&m%2==1) fun1(); else fun(); } return 0; }
“IBM南邮杯”南京邮电大学第二届大学生程序设计竞赛之预赛-蛇形矩阵,布布扣,bubuko.com
“IBM南邮杯”南京邮电大学第二届大学生程序设计竞赛之预赛-蛇形矩阵
原文:http://blog.csdn.net/zhangweiacm/article/details/20033255