题目 1097: 蛇行矩阵

题目描述

蛇形矩阵是由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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值