1.问题
2.分析
1)常规是按照行,列进行输入输出
但是填入数据发现是按照从左上到右下,可以利用层数与层中第几个确定每一个数字
2)记有i层,j表示某层中的第几个元素
举例子:6在第二层,第二个 10在第四层,第1个
3)输入数据时,按照层比较方便,因此需要找到层与每层有几个数作为循环条件
第一层有4个数,第二层有3个数,第三层有2个数,,,
从而找到 i 的范围:1~n j 的范围:1~(n + 1 - i)
4)为把数字插入,接下来找某个数的所在层数中的第几个与实际所在行,列的关系
可以看到,每层的第几个与对应的列是一样的,都是 j
那么再求对应行,
刚才举的例子:6在第二层,第二个,对应第三行 10在第四层,第一个,对应第四行
找到行的规律 i + j - 1
3.代码
#include <stdio.h>
int main() {
int arr[10][10];
int i,j,k = 0;
int m,p;
int n;
// 输入数据
printf("请输入矩阵行数,列数:");
scanf("%d", &n);
// 按照层次进行遍历 注意遍历初始值要从 1 开始
for (i = 1;i <= n; i++) {
for (j=1;j<=n+1-i;j++) {
// 依次赋值
arr[i+j-1][j] = ++k;
}
}
// 按照格式打印出来
for (m = 1;m<=n;m++) {
// 打印按照格式
for (p = 1; p <= m; p++) {
printf("%d ",arr[m][p]);
}
printf("\n");
}
return 0;
}
4.结果