C++实现打印n阶实心菱形

  • 题目名称:n阶实心菱形‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
  • 类型:循环‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
  • 描述:根据用户的输入n,输出n阶实心菱形‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬026636f7d25e498995d948679c113ca9.jpg
  • n阶实心菱形:两对角线均为(2n-1)个星号“*”长度,即整个图形共有(2n-1)行和列。

  • 思路:我们知道n阶实心菱形共有(2*n-1)行和列,每行都有空格和星号要打印(对角线那行除外),通过两个循环(一个控制行数,一个控制列数)可实现行列上空格或星号的打印;每行都是打印空格后打印星号,而每行先打多少空格再打多少星号则要通过数学规律来求得;还有切记打完这一行的星号后就不用再考虑同一行后面“好像还有的”空格了(打完前面的空格和星号,形状就已经出来了,不要思维固住了,认为后面还要打印一定量的空格)。最后可将菱形以第n行为界分为上下两部分(上面n行,下面(n-1)行);上面部分中前(n-1)行与下面部分是完全对称的,这样只要打印出了上部分,下部分自然能出来。

代码:

1.对于上半部分:

5cc7036f744943dbb5e5d886f9f2714b.jpg

 运行结果(n=6)如下:

95015b06a5654088b2d94818c7cd8f41.jpg

 注释:

①把上半部分分成左右两部分(以对角线为界),左边部分(包括对角线)中第i行有i个星号,右边有(i-1)个,则每一行中星号的左边空格数为(n-i)个;

②每一行最后一个空格在第(n-i)列,则每行第一个星号在第(n-i+1)列;

③由①可知,每行星号数为(2*i-1)个,则每行最后一个星号在第(n-i)+(2*i-1)=(n+i-1)列。

2.对于下半部分(把上半部分的(n-1)行倒过来输出即可)

=>把“for(int i=1;i<=n;i++)”改为“for(int i=(n-1);i>=1;i--)”;

=>因为上半部分前(n-1)行代码为“for(int i=1;i<=(n-1);i++)”;

=>其余不变。

8697e9da874042afb7120f83ea4b9992.jpg

 运行结果(n=6)如下:

906bc8adc1114031b96d39d56047088a.jpg

 上下两部分合并即可得到完整代码:

ebab2e1f0fec4077bccf28dda765c6be.jpg

 运行结果如下:

081787170cf141669823d71e65f65489.jpg


注意(可能导致编译出错的):

1.for语句小括号内是“;”,而非“,”;

2.for语句小括号后不要加“;”(加了就表示语句结束了,后面的将不再执行);

3.在某for语句内定义的变量只能用于本for语句内使用,即该变量的作用域为该for语句。

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值