我以前也见过其他大人物的问题,大部分都分为两个大的for循环分别印刷菱形的上部和下部。 如果不把上下两个部分分开,我们这个循环该怎么写?
num int型、菱形的总行数
helf int类型是菱形行数的一半,即num/2
这里写的代码可以看到我使用了三个for循环:
最外面的for循环打印菱形行数。
包在里面的第一个for循环负责打印空间,也就是编辑格式。
第二,印刷菱形。
实现菱形打印的关键在于这中间两个for循环的判断部分。
现在,让我们举一个例子来分析一下这两个判断部分是怎么想的:
假设菱形行数num为7
下图的空间请用-代替
菱形空间数星号数
---* 0 3 1
--*** 1 2 3
-***** 2 1 5
******* 3 0 7
-***** 4 1 5
--*** 5 2 3
---* 6 3 1
总行数7的行数的一半为3(7/2==3) )。
上面的数据显示
我们先考虑空格如何打印。
如果查看上半部分、第0行至第3行,则可以看到行数的一半减去当前行数,正好等于上半部分的空格数
3-0=3,3-1=2,3-2=1,3-3=0
因此,表达式helf - i=得到上半部分的空格数。
同样,将这个公式带入下半部分第4行至第6行的结果是
3-4=-1、3-5=-2、3-6=-3
而且我们需要的结果是
3-4=(1)、3-5=(2)2)、3-6=(3)3) )。
设定绝对值就可以了吗?
因此,我们对第一个循环的判断条件是,你的循环次数小于你的总行数的一半,减去当前行数后的值取其绝对值,就是我们需要打印的当前行数的空间数。
那*号如何打印呢?
同样,在考虑空格打印时,首先打印星号的上半部分,即从第0行至第3行,分别打印1、3、5和7个星号。 在现阶段还什么也看不见。 想想别的排列方法吧。
0==’1,1==’3,2==’5,3==’7
行数的一半是3,我们的循环从0开始。 我们的上半部分不能写这样的公式
行*2,即
for(intj=0; ji*2; j )那么,基于这一观点,要研究下半部分,需要进行以下操作
4==’2=’5,5==’1=’3,6==’0=’1
按照这个流程,我们可以直接给出6-你下半部分的行数,得到2 1 0。 但是,我们上半部分的公式是行数*2,似乎和我们下半部分不太相符。
以我们普通的行数,也就是说我们的helf能否代入我们的公式,在这里我也卡住了很久。 怎么也找不到主意,一直在挖6-行数的路子,所以试着带进了helf。 做不到,毕竟,helf表示的数字是我们行数的一半,是我们中最长的行数,是一个承办方的左右。
它似乎在行数%helf的上半部分(除了中间的第三行)没有任何问题,但同样是我的空间。 但是,到了下半场就得到1、2、0。 那个好像和我们的2 1 0有点像,怎么转换?
让我们看看前两个数字1、2和1。 他们的和正好是helf,是我们的3
那么,我们能通过在行数%helf上加3或减3,取绝对值来得到我们的1和2吗? 初步做了一下得到了公式
math.ABS(I%helf-helf )到此为止,行数为4,5没有问题,但1 )2) 6为止,让我们总结一下发生了各种各样的问题
所以,这个-helf是我们不能随便添加的。 你怎么控制那个? i/helf,我们加入i/helf后,我们的数据
1、2、3、4、5时没有大问题,但到了6时会发生多个星号问题。 这是因为当我们的I为6时,i/helf==2,最后我们取的绝对值为12,最后打印13个星号。 所以我们必须
将%2添加到i/helf以限制此6。 最后得到公式
math.ABS(I%helf-helf ) (I/helf ) ) )到此为止,我们通过在三个for循环中打印菱形结束了谈话。 我没有经验第一次做这个。 大佬,和我一样的小萌给我新评论,有什么有趣的代码就分享研究吧((^^ ) )接下来遇到什么有趣的代码的时候也发博客给大家分享。