本文已参与「新人创作礼」活动,一起开启掘金创作之路。
蛇行矩阵
题目描述
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 样例输入: 5 样例输出: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11
解题思路
首先确定每一行的首个字母,根据样例1 2 4 7 11 可以得知,第一行的首个数字的1,第二行的首个数字在第一行的首个数字基础上加一,第三行的首个数字在第二行的首个数字上加二,依次类推。第n行的首个数字等于第n - 1行首个数字 + n - 1。 a(n) = a(n - 1) + n - 1。 其次确定每一行的各个相邻的数字之间的关系: 1 ( + 2) 3 ( + 3) 6 ( + 4) 10 ( + 5) 15 2 (+3) 5 (+4) 9 (+5) 14 4 (+4) 8 (+5) 13 7 (+5) 12 11 首先看每一行之间的关系,两个数之间的差值逐次增一。 其次确定第一次要增加的数值,通过上面的例子可以看出首次增加的数值是其所在行数加一。如该行是第3行,则首个增加的数值为3 + 1,即首次增加4。
源代码
#include<stdio.h>
int main()
{
int n; //获取用户输入的行数
scanf("%d", &n);
int row = 1;
int number = 1; //用于每行的首个数字的确定
for (int i = n; i > 0; i--) //行的控制
{
int first;
first = number; //首行数字
int count = 1; //每行中的相邻数字之间的差的控制
for (int j = i; j > 0; j--) //每行中的数字个数的控制
{
printf("%d ", first);
first = first + row + count;
count++;
}
number = number + row; //每行的首个数字
printf("\n");
row++; //用于相邻行的首个数字的控制
}
return 0;
}
亲测可用,代码可直接运行。 答案仅供参考。