POJ 3752 字母旋转游戏

问题描述:
给定两个整数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 }
原文地址:https://www.cnblogs.com/wxdjss/p/5707856.html