要在控制台打印出入上图的三角形,我们假设坐标系为:横向为r(row)轴,向右为正;纵向为c轴(cols)轴,向下为正。我们打印的*号填成的三角形为△ABC。A点的坐标为(15,1),B点的坐标为(9,7),C点的坐标为(21,7)。直线AB的斜率为:
同理,直线AC的斜率为:
所以,直线AB的方程为:
同理,直线AC的方程为:
同理,直线BC的方程为:r=7。
因此我们打印*号的位置(r,c)应满足:
编码
public class Triangle{
public static void main(String[] args){
for(int r=1;r<=7;r++){ // r<=7才打印
for(int c=1;c<=30;c++){//打印列的范围为[1,30]
if((r+c)>16&&(r-c)>-16){ //如果r,c满足落在直线AB和直线AC围成的范围内,则打印*
System.out.print("*");
}else{ // 否则打印空格
System.out.print(" ");
}
}
System.out.println();//打印完一行后,换行
}
}
}
输出:
总结
打印这样的三角形,r和c总是满足r+c>n并且r-c>-n,其中n为任意整数。r控制打印的行数,范围可以是[1,n]之间的任意整数;c控制打印的列数,范围可以是[1,2n]之间的任意整数。例如,如果将上面r的范围变为[1,16],c的范围变为[1,32],则会产生如下的输出:
相信聪明如你,应该找到了其中的规律!!!O(∩_∩)O~~