字母旋转方阵
时间: 1ms 内存:128M
描述:
给定两个整数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的整数。
输出:
分行输出相应的结果,注意每行开始有1个空格,相邻两个字母之间有1个空格
示例输入:
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
提示:
参考答案(内存最优[1092]):
#include <stdio.h>
int main()
{
int m, n;
int flag = 0;
int num1 = 0, num2 = 1;
int i = 0, j = 0;
char s = 'A';
char a[31][31];
scanf("%d %d",&m,&n);
a[0][0] = s;
while(flag < m*n-1)
{
switch(num2%4)
{
case 1:
++j;
if(j == n-num1-1)
{
num2++;
}
break;
case 2:
++i;
if(i == m-num1-1)
{
num2++;
}
break;
case 3:
--j;
if(j == num1)
{
num2++;
}
break;
case 0:
--i;
if(i == num1+1)
{
num2++;
num1++;
}
break;
}
if(++s == 'Z'+1)
s = 'A';
a[i][j]=s;
flag++;
}
for(i=0; i<m; i++)
{
printf(" ");
for(j=0; j<n; j++)
{
if(j!=n-1)
printf("%c ", a[i][j]);
else
printf("%c", a[i][j]);
}
printf("\n");
}
}
参考答案(时间最优[0]):
#include <stdio.h>
int main()
{
int m, n;
int flag = 0;
int num1 = 0, num2 = 1;
int i = 0, j = 0;
char s = 'A';
char a[31][31];
scanf("%d %d",&m,&n);
a[0][0] = s;
while(flag < m*n-1)
{
switch(num2%4)
{
case 1:
++j;
if(j == n-num1-1)
{
num2++;
}
break;
case 2:
++i;
if(i == m-num1-1)
{
num2++;
}
break;
case 3:
--j;
if(j == num1)
{
num2++;
}
break;
case 0:
--i;
if(i == num1+1)
{
num2++;
num1++;
}
break;
}
if(++s == 'Z'+1)
s = 'A';
a[i][j]=s;
flag++;
}
for(i=0; i<m; i++)
{
printf(" ");
for(j=0; j<n; j++)
{
if(j!=n-1)
printf("%c ", a[i][j]);
else
printf("%c", a[i][j]);
}
printf("\n");
}
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。