POJ 3752 字母旋转游戏

时间:2023-03-08 18:54:38
问题描述:
给定两个整数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
参考代码:
 #include<iostream>
#include<iomanip>
using namespace std; void MATRIX(int** arr,int row,int col)//row为数组行,col为数组的列
{
int count=;
int x,y,min;
(row>col)? min=col : min=row;
if(arr==NULL||row<=||col<=) return;
for(int round=;round<min/;++round)
{
x=round;
for(y=round;y<col-round;y++)
{arr[x][y]=count++;} y=col-round-;
for(x=round+;x<row-round-;x++)
{arr[x][y]=count++;} x=row-round-;
for(y=col-round-;y>=round;y--)
{arr[x][y]=count++;} y=round;
for(x=row-round--;x>round;x--)
{arr[x][y]=count++;}
}
if(row==col&&row%==){arr[row/][col/]=count;}
if(min==row&&col!=row&&row%==)
{
for(y=min/;y<col-min/;y++)
arr[min/][y]=count++;
}
if(min==col&&col!=row&&col%==)
{for(x=min/;x<row-min/;x++)
arr[x][min/]=count++;
}
for(x=;x<row;x++)
for(y=;y<col;y++)
{ cout<<setw()<<char(arr[x][y]%+'A');
if(y==col-)
cout<<endl;
} } void main()
{
int **arr;
int col,row,i;
cin>>row>>col;
arr=new int*[row];//申请内存
for(i=;i!=row;++i)
{arr[i]= new int[col];}
MATRIX(arr,row,col);
for(i=;i!=row;++i)//释放内存
{delete [] arr[i];}
delete [] arr;
}