题目描述
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
输入
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
输出
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
样例输入复制
5
样例输出复制
1 3 6 10 15 2 5 9 14 4 8 13 7 12 11
解题思路:
该题目的思路是套用两次for循环把结果输出,具体方法是 首先找出每一行的规律,也就是first=first+j+k,比如第一行相邻两个数的差是 2 3 4 5,那么下一行就需要比上一行多1 下一行就变成3 4 5,所以需要一个变量k从0开始随着外循环每次都加1,至此,每行的顺序就排好了。
接着就是每一列的输出思路了,因为我没有使用数组,在这里我需要在外循环重置first的值,此时需要考虑的问题是,当内循环每次j的值都等于1时,需要再次覆盖first的数值,如果仅仅按照first=first+j+k这样的形式输出,则第一列会变成1 3 5 7,这样于输出不符。但是如果要是修改first=first+j+k的形式,那么每行就会改变,所以这个等式不能改变,既然等式不能够改变,并且等式里的first在每行的第一个都需要改变,那么我能想到的办法就是覆盖第一个first,因此我在内循环里套了一个if判断语句。最终成功输出。
注意事项:
单纯的输出需要判断变量在不同循环里的值的变化,并且根据需要重新修改值,这一点需要牢牢记住,并且在输出之后,保证它的规律是具有普遍性的
参考代码:
while True:
try:
a=int(input())
k=0
f1=1
for i in range(1,a+1):
x=0
x=x+i-1
first=x
for j in range(1,a+2-i):
first=first+j+k #第一行后一个数都比前一个数多2 3 4 5
if j==1:
first=f1+i-1
f1=first
print(first,end=" ")
print()
k+=1
except:
break