关于for(输出图形)

请输出以下图形:

          *

         ***

      *****

       *******

      *********

分析:

新手刚看这道词可能觉得无从下手,其实,如果把图形改成一个矩形:

 

      *********

      *********

      *********

      *********

      *********

那么就很好解决了:输出5行,其中每行都输出9个* 。

 

for(int i=0;i<5;i++)

{

      for(int j=0;j<9;j++)

      {

        println("*");

      }

}

 

对于三角形,程序仍然是这个结构:需要两层循环。同样是要输出5行,所以外层循环不变;不同的地方在于每一行输出的内容。其实三角形同样是输出一个矩形,只不过有些地方要打空格,有些地方要打*,以下我们用“-”表示空格,则三角形实为:

 

       ----*----

       ---***---

       --*****--

       -*******-

      *********

所以,问题的重点在于:在每一行中,哪些地方要输出空格,哪些地方要输出星号?如果我们行和列都从1开始编号,如图:

 

仔细观察我们发现,哪一列要打星,哪一列要打空格,主要和该列与第5列(红线所在列)的距离有关:

第 1 行: 只有第5列本身打星,第5列和第5列(自身)的距离是0

第 2 行: 除了第5列以外,增加第4、6列,4和6与5的距离都为1

第 3 行: 增加了3、7两列要打星,3,7两列和5的距离都为2

……

 

行了,规律就是:在第n行内,凡是和第5列的距离小于n的列,都要打星,其余的列打空格。

下面代码中,row表示当前行,col表示当前列。

 

答案:

 


main(int argc, char* argv[])

{

       for(int row=1;row<=5;row++)

      {

          for(int col=1;col<=9;col++)

          {
                if( col-5 > -row && col-5 < row)
                    print( "*");
                else
                    print(" ");
            }

        print(/n);
       }

      getchar();

      return 0;
      }

以下是输出结果:

 

 

在本例中,为了保持大家日常生活的习惯,我对行,列的编号均从1开始,其实,C,C++程序员更习惯于编程从0开始,即原来的第1行现在称为第0行,第1列称为第0列,则相关代码如下(黑体部分为改动处):

 

for(int row=0;row<5;row++)

      {

          for(int col=0;col<9;col++)

          {
                if( col-4 >= -row && col-4 <= row)
                    print( "*");
                else
                    print(" ");
            }

         print(/n);

       }

学会从0开始索引的思想方法,这也是大家所要注意的,否则在阅读别人代码时会比较困难。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值