镂空三角形的三种写法

题目:输入一个字符和整数n,不同字符表示不同花纹,n表示等腰三角形的高,底边长为n-1

第一种:用二维数组的方法

0fe104fb2d9048739006b33e0858a1c7.png

245ba9a3e91c4d1b9b5b89f6c6744c91.png 

 首先第一个双层循环将所有的位置都放满空格,因为第一行和最后一行比较特殊一点儿,就先把这两行处理了(第一行正中间是字符,最后一行全是字符)

第二个双层循环,打印除了第一行和最后一行以外的所有行,利用p-k,p+k和k++不断往下打印,容易看出,第一行字符打印位置是n-1,那么第二行的位置就是n-2和n+2(即是p-1和p-2)

最后一个双层循环用来打印前面已经放下的空格或者字符

缺点:过于复杂繁琐,并且打印的行列有限制(graph[35][70]进行了限制,数组大小范围已经确定)

 

第二种:无脑找规律法(基本上所有图形打印题都能套用)

2fd81243f2304e19985f25368c36c379.png

 与二维数组一样,我们将第一行和最后一行单独拿出来处理(注意,在第一行的处理的时候用一个contimue语句重新开始循环,否则会往下执行,打印空格和字符)

第一个双层循环用于打印三角形外左边的空格(右边的省略不管),外循环控制行数,内循环控制列,行数每加一行,打印的字符就往前一位,且根据第一行的字符在第n个位置,则第二行的空格需要打印n-2个,第n-1位打印字符(我们将打印字符放在外循环),依次类推

第二个循环用于打印三角形内部的空格,跟外部空格相反,随着行数增加,空格数也增加,找到空格出现的规律,即上面写的2*i-3,下一个位置打印字符并换行(同样放在循环外),这个循环代表着一行结束

最后一个单循环打印最后一行

与二维数组打印相比,这个方法循环较少,逻辑更加有顺序感,对逻辑思维不强的更加容易被接受,同时没有数据限制

 

第三种:高级规律法

f6a36874b3a14806bb58ce36cdaafece.jpg

a6ce6347300e48408ffe7190ba665885.jpg 

 第一个双层循环,外循环同样控制行数,内循环控制列,第一个if打印左半个三角形的字符,第二个if打印右半个三角形的字符,从特殊到一般,比如第一行,打印字符的位置是第n-1位,这时候i=0,j=n-1,则j-i=j+i=n-1(其中i+j对应左半个三角形的字符,j-i对应右半个三角形的字符),每往下一行,打印字符的位置就往两边移一列,所以i+j和j-i的值始终没变,每当等于n-1时就打印一个字符,else语句用于打印空格,用putchar(10)来换行,打印下一行,10是整数,在ASCLL码表中代表换行

最后一个循环用来特别打印最后一行,同样putchar换行

这种方法更加没有特殊性,需要发现字符位置变换而行列加减关系不变的规律打印字符,只需要将最后一行单独打印,循环更少

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值