适合初学者的代码,我的想法非常简单,将数依次存入数组,那么我将向右、向下、向左、向上依次执行,而每执行一次则将各自的条件减一(如执行一次向右的循环,则条件是执行次数小于列数,那么在向上赋值循环时执行次数就少一次),而下一次的执行将继承上一次结束时的列数或行数进行存入数组,直到存入的元素等于已知的最后一个数。
#include <stdio.h>
int main() {
int n,m,i=0,j,x=0,y,k=-1,z=-1;
scanf_s("%d %d",&n,&m);//输入要打印矩阵的行列数.
int o=n,p=m;//另存行列数,代替行列递减.
int a[n][m];
a[0][0]=1;//本题打印是从1依次加1的矩阵.
int nm=n*m;//存储最后打印的一个数.
while(1){ //注意每次改变方向时,下一个循环的开始位置的规律.
for(j=i+1;j<m;j++){//这里j的定义是由上一个循环结束的位置加一作为这次的开始.
a[x][j]=a[x][j-1]+1;
} //k存储着向上打印的限制(向右打印一次向上的条件就要加一)j--是恢复结束时位置
k++,j--;//并继承给下一个循环.以下三个循环同理.
if(a[x][j]==nm)break;//在每一个循环后判断,打印的是否为最后一个数,是则跳出整个大循环
for(y=x+1;y<n;y++){
a[y][j]=a[