问题 A: 零基础学C/C++126——回型矩阵
题目描述
输出n*m的回型矩阵
输入
多组测试数据 每组输入2个整数 n和m(不大于10,且不同时为10)
输出
输出n*m的回型矩阵,要求左上角元素是1,(每个元素占2个位置,靠右)
样例输入 Copy
4 3
样例输出 Copy
1 2 3
10 11 4
9 12 5
8 7 6
题解
如上所示,我们有两个思路解决,一个是正常思路,按行然后按列然后再按行···但是会发现最后还要判断最后是按行展开还是按列,比较头疼
那么我们讲解第二种思路,因为我们每个位置的数都是可以根据上一个位置得来的,主要有四种变化,右++,下++,左++,上++,写起来也是比较头疼,不过题目本身就这样没办法。
如果你有更好思路与代码,可以来跟我分享(^U^)ノ~YO
代码(AC)
点击查看代码
#include <stdio.h>
#include <math.h>
int main (){
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
int a[m][n];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=0;
}
}
a[0][0]=1;
int x=0,y=1;
for(int i=2;i<=m*n;i++)
{
a[x][y]=i;
if(a[x][y]==a[x][y-1]+1 && y+1<n && a[x][y+1]==0) {y++;continue;}
else if(a[x][y]==a[x][y-1]+1 && (y+1<=n || a[x][y+1]!=0)) {x++;continue;}
if(a[x][y]==a[x-1][y]+1 && x+1<m && a[x+1][y]==0) {x++;continue;}
else if(a[x][y]==a[x-1][y]+1 && (x+1<=m || a[x+1][y]!=0)){y--;continue;}
if(a[x][y]==a[x][y+1]+1 && y>=0 && a[x][y-1]==0) {y--;continue;}
else if(a[x][y]==a[x][y+1]+1 && (y>=0 || a[x][y-1]!=0)){x--;continue;}
if(a[x][y]==a[x+1][y]+1 && x>=0 && a[x-1][y]==0) {x--;continue;}
else if(a[x][y]==a[x+1][y]+1 && (x>=0 || a[x-1][y]!=0)){y++;continue;}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
printf("%2d",a[i][j]);
if(j<n-1) printf(" ");
if(j==n-1) printf("\n");
}
}
}
return 0;
}