输入,一个n,一个m,代表行和列
输出,一个n行m列的从1开始到n*m结束的矩阵
#include<stdio.h>
int main()
{
int i,j,k,n,m,a;
int num[20][20],l,h;
scanf("%d %d",&n,&m);//行 列
i=j=k=0;
a=1;//从1开始填充
h=n;
l=m;
while(a <= l*h)//当数据大于h*l时结束
{
for(j=k;j<m;j++)//行号 i 不变,列号j自加
{
num[i][j]=a;
a++;
}
j--;//j与a都多加了一次,这里减去
a--;
for(i=k;i<n;i++)//行++,列不变
{
num[i][j]=a;
a++;
}
i--;//j与a都多加了一次,这里减去
a--;
for(j=m-1;j>k;j--)//列-- 行不变
{
num[i][j]=a;
a++;
}
if(a>=h*l)break;
for(i=n-1;i>k;i--)//行-- 列不变
{
num[i][j]=a;
a++;
}
i++;//i多减了一次;
n--;//下,右边界减一,圈数加一,缩小范围
m--;
k++;
}
for(i=0;i<h;i++)//打印出已经填充好的数据
{
for(j=0;j<l;j++)
printf("%-3d ",num[i][j]);
printf("\n");
}
return 0;
}