问题描述:
给定两个整数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
参考代码:
1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 5 void MATRIX(int** arr,int row,int col)//row为数组行,col为数组的列 6 { 7 int count=0; 8 int x,y,min; 9 (row>col)? min=col : min=row; 10 if(arr==NULL||row<=0||col<=0) return; 11 for(int round=0;round<min/2;++round) 12 { 13 x=round; 14 for(y=round;y<col-round;y++) 15 {arr[x][y]=count++;} 16 17 y=col-round-1; 18 for(x=round+1;x<row-round-1;x++) 19 {arr[x][y]=count++;} 20 21 x=row-round-1; 22 for(y=col-round-1;y>=round;y--) 23 {arr[x][y]=count++;} 24 25 y=round; 26 for(x=row-round-1-1;x>round;x--) 27 {arr[x][y]=count++;} 28 } 29 if(row==col&&row%2==1){arr[row/2][col/2]=count;} 30 if(min==row&&col!=row&&row%2==1) 31 { 32 for(y=min/2;y<col-min/2;y++) 33 arr[min/2][y]=count++; 34 } 35 if(min==col&&col!=row&&col%2==1) 36 {for(x=min/2;x<row-min/2;x++) 37 arr[x][min/2]=count++; 38 } 39 for(x=0;x<row;x++) 40 for(y=0;y<col;y++) 41 { cout<<setw(3)<<char(arr[x][y]%26+'A'); 42 if(y==col-1) 43 cout<<endl; 44 } 45 46 } 47 48 void main() 49 { 50 int **arr; 51 int col,row,i; 52 cin>>row>>col; 53 arr=new int*[row];//申请内存 54 for(i=0;i!=row;++i) 55 {arr[i]= new int[col];} 56 MATRIX(arr,row,col); 57 for(i=0;i!=row;++i)//释放内存 58 {delete [] arr[i];} 59 delete [] arr; 60 }