问:画一个数字菱形,如图
分析:我们可以看到,整个菱形输出,是由空格和字符输出的,首先将整个菱形以“1”分割形成上下两个三角形,
单看上面的三角形,我们可以看到,假设行数为n,那么每一行输出的数字是2n-1个,而数字左边的空格从上到下是9格到1格,9在第一行,8在第二行,那么数字i就在10-i行,那一行输出数的个数则为2*(10-i)-1=19-2i个。
然后用一个外循环,输出1到9行,再嵌入内循环,在每一行输出特地个数的空格和数字。
代码如下:
#!/bin/bash
for((i=9; i>=1; i-- )) //从第一行开始,一个外循环写入一行,共9行
do
for(( m=1; m<=$i; m++ )) //第一个内循环用于输出空格
do
echo -n " " //输出空格
done
for(( n=1; n<=$[19-2*$i]; n++)) //第二个内循环用于输出数字
do
echo -n "$i" //输出数字
done
echo "" //echo 引号内不加东西,默认换行
done
结果
执行过程:
先进入第一个外循环,开始输出第一行的内容,进入第一个内循环,输出9个空格,然后进入第二个内循环,输出一个数字9,然后输出换行,第一个外循环结束,进入第二个外循环,输出第二行的内容,按上面的流程,直到循环结束。
可以看到上半个已经有了,下半个与上半个比就是一1为对称轴的三角形。
需要修改的只有打印的行数和初始值,整体代码如下:
#!/bin/bash
for((i=9; i>=1; i-- ))
do
for(( m=1; m<=$i; m++ ))
do
echo -n " "
done
for(( n=1; n<=$[19-2*$i]; n++))
do
echo -n "$i"
done
echo ""
done
for((i=2; i<=9; i++ )) //输出2-9行的内容
do
for(( m=1; m<=$i; m++))
do
echo -n " "
done
for (( n=1; n<=$[19-2*$i]; n++))
do
echo -n "$i"
done
echo ""
done
输出菱形的方法很多,关键点就是怎么找到一个能用for循环表示的规律,一行一行的输出空格和字符,这个只是其中的一种,大家可以自行寻找尝试。有想法了可以尝试输出看看,由输出结果针对性的修改。