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 }
相關文章
相關標籤/搜索