python500题:星号正三角。
猎风老师的习题课。
大家好,下面来看一下嵌套循环图形输出的星号正三角这道题目。题目要求输入一个整数n,然后输出一个n行的星号正三角形。星号正三角形其实和直角三角形的区别就是居中的等腰三角形,它的星号数量每行都是一个奇数。
来看一下这张图,比如第一行是一个,第二行是三个,第三行是五个。采用的方法还是和上面的题目类似的方法,就是对每一行的输出,把它分成空格和星号这样两个部分。这道题的重点就是确定星号的数量和空格的数量。
·首先来看一下星号的数量,正三角形的星号数量是奇数,奇数可以用一个式子来表达,行号是i的时候,它的星号的数量就是两倍的i减去1,这是奇数的表达式。
·星号的数量确定了之后,空格的数量是多少个?空格的数量可以通过观察也可以发现一些规律。比如第一行的时候会发现它有两个空格,它的n是等于3的,i等于1,它的空格数量2个。比如n等于3的时候,行号i等于2的时候,它的空格数量是1个。其实仔细推导一下,它的数量可以用n减i获得。
·还有一种方法,其实它的空格数量可以严格推导。假设我是第n行的时候,它的总数量应该是两倍的n减去1,就第n行n=3的时候就是5个。所以把它看成一个矩形的时候,它的每一行的总格子应该跟最后一行的格子相等,就是r n减一个,总格子是r n减一个。
·当第i行的时候,它的星号是多少?是2*i-1,用总格子减去其中的星号的数量,就是剩下的,就是当前这一行的空格的数量。这个式子减下来就等于两倍的n减去两倍的i,但是这个空格是左右对称的。左边和右边的数量是相等的。然后把这个式子再除以2就得到n减i,所以它的空格是数量是n减i,是可以严格推导的。
下面开始编写程序。首先从键盘输入一个整数n=intlinput(),然后来一个两层的for循环,外面代表有n行,for i in range1到n加1。里面分成两个部分,空格和星号。空格的数量刚才推导它是有forjin range,它有n-i个1到n减i,但是根据range的特性要多加一个,这时候要输出n减i个空格。
输完n-i个空格之后再输星号的数量,for jin range 1到星号的数量是2*1-1,两倍的i减一,然后再把它加一两倍的i,输出星号,然后再来一个换行。自测一下,比如输入一个55行的星号,真三角,第一交测评,正确。