Problem D: 零起点学算法96——回型矩阵
Description
输出n*m的回型矩阵
Input
多组测试数据 每组输入2个整数 n和m(不大于9)
Output
输出n*m的回型矩阵,要求左上角元素是1,(每个元素占2个位置,靠右)
Sample Input
4 3
Sample Output
1 2 3
10 11 4
9 12 5
8 7 6
#include <stdio.h>
const int N = 20;
int main()
{
int n,m;
int index, i, j,c;
while(scanf("%d%d",&m,&n)!=EOF)
{
i = j = 0;
index = 1;
int arr[N][N];
if(m > n)
{
if(n%2 == 0)
c=n/2;
else
c=n/2+1;
}
else
{
if(m%2 == 0)
c=m/2;
else
c=m/2+1;
}
for(i=0; i<c; i++)
{
for(j=i; j<n-i-1; j++) //输入当前行的数
arr[i][j]=index++;
for(j=i; j<m-i-1; j++) //输入当前列的数
arr[j][n-i-1]=index++;
for(j=n-i-1; j>i; j--)
{
if(index <= m*n)
arr[m-i-1][j]=index++;//输入第m-i-1行的数
}
for(j=m-i-1; j>i; j--)
{
if(index <= m*n)
arr[j][i]=index++; //输入第i列的数
}
}
if(index-1 < m*n) //判断当输入行和列是奇数时最中心的那个数有没有输入,即最后一个数有没有输入
arr[m/2][n/2] = m*n;
for(i=0; i<m; i++)
{
for(j=0; j<n-1; j++)
{
printf("%2d ", arr[i][j]);
} printf("%2d\n",arr[i][n-1]);
}
}
return 0;
}