画三角形2
依然是画如图所示的三角形

对于该问题可以分解为两个问题
1.如何画出picture 1和picture 2,
2.然后合并picture 1和picture 2


对于构成三角形的点,如果放在坐标系中看,可以看作一个一个的坐标。
尝试根据打印的规律建立坐标系。以三角形的行方向作为x轴,至上向下打印为正向;以三角形的列方向作为y轴,至左向右打印方向为正向。
则对于picture 1可以得到picture 3所示的坐标系

y−1x−10=10−11−10\frac{y-1}{x-10}=\frac{10-1}{1-10}
x−10y−1=1−1010−1
整理后得到直线1
x+y−11=0x+y-11=0
x+y−11=0
经过(10,1)和(19,10)的直线2方程为
y−1x−10=10−119−10\frac{y-1}{x-10}=\frac{10-1}{19-10}
x−10y−1=19−1010−1
整理后得到
y−x−9=0y-x-9=0
y−x−9=0
根据公式变成伪代码如下:
伪代码
for i = 1:10:
for j = 1:19:
if i+j-11 = 0 or i-j-9 = 0:
print('*')
else:
print(' ')
对于picture 2而言可以理解为直线1与直线2所围成的区域
任意取三角形内的一点(2,10),可以判断出三角型围成的区域为:
L(x,y)={x+y−11>0y−x−9<0x≤10
L(x,y)=
\begin{cases}
x+y-11>0 \\
y-x-9<0\\
x\leq10
\end{cases}
L(x,y)=⎩⎪⎨⎪⎧x+y−11>0y−x−9<0x≤10
转换成伪代码如下:
伪代码
for i = 1:10:
for j = 1:19:
if i+j-11>0 and i-j-9 < 0:
print('*')
else:
print(' ')
为了得到picture1,我们应该综合以上两段代码如下
伪代码
for i = 1:10:
for j = 1:19:
if i+j-11>=0 and i-j-9 <= 0:
print('*')
else:
print(' ')
在实际中的代码如下
打印三角形
for i in range(1,11):
for j in range(1,20):
#if i+j-11 >= 0 and i+9-j >= 0:
if i+j-11 >= 0 and j-9-i <= 0:
print('*',end=' ')
else:
print(' ',end=' ')
print('\t')
同时对于其他多边形也可以参考该思路得到
2664

被折叠的 条评论
为什么被折叠?



