打印数字图形

目录

1.题目描述:先要求你从键盘输入一个整数n(1<=n<=9),打印出指定的数字图形。

2.输入:输入包含多组测试数据。每组输入一个整数n(1<=n<=9)。

3.输出:对于每组输入,输出指定的数字图形。注意:每行最后一个数字后没有任何字符。

4.样例输入:5

5.样例输出:

6.思路

7.代码展示: 

8.结果展示

 9.原题目链接


1.题目描述:先要求你从键盘输入一个整数n(1<=n<=9),打印出指定的数字图形。

2.输入:输入包含多组测试数据。每组输入一个整数n(1<=n<=9)。

3.输出:对于每组输入,输出指定的数字图形。
注意:每行最后一个数字后没有任何字符。

4.样例输入:5

5.样例输出:

    1
   121
  12321
 1234321
123454321
 1234321
  12321
   121
    1

6.思路

可以观察这个输出图形是一个上下左右都对称的图形。

第一版:按照左右对称输出,先输出左边,但是问题就是一旦上一行没有输出完,那么跳入下面的行的时候,如何让鼠标返回去是一个问题,所以这个想法行不通。

第二版:定义数组输出,整个二维数组填充最后一个又一个输出就行,但是问题就是:空格的地方需要有数据,那如果定义为字符串数组,中间的数字是有规律的,那数字输出来就很麻烦,定义为整形数组那空格没办法输出来,所以这个想法依旧不通过

第三版:按照上下对称输出,观察规律,很容易能看出n与输出行数i和列数j的关系,可以写出下列代码,但实际上,我并没有写出来,思路出来,去,看到这个答案的时候还是挺懵的,但是仔细观察加上在编译器里一步一步调试的时候就很清楚了。

ps:当你看不懂别人代码的时候,可以调试,一步一步下来之后就能明白了,加油!

7.代码展示: 

#include<iostream>
#include<vector>
using namespace std;

void printTopPart(int n)//打印左半部分
{
    for(int i=1;i<=n;i++)
    {
        //打印空格
        for(int j=1;j<=n-i;++j)
        {
            cout<<" ";
        }
        //打印上半部分递增数据
        for(int j=1;j<=i;j++)
        {
            cout<<j;
        }
        //打印上半部分递减数字
        for(int j=i-1;j>=1;j--)
        {
            cout<<j;
        }
        cout<<endl;
        
    }
}
void printBottomPart(int n)//同上只是换了方向
{
    for(int i=n-1;i>=1;i--)
    {
        for(int j=1;j<=n-i;j++)
        {
            cout<<" ";
        }
        for(int j=1;j<=i;j++)
        {
            cout<<j;
        }
        for(int j=i-1;j>=1;j--)
        {
            cout<<j;
        }
        cout<<endl;
    }
}
int main()
{
    int n;
    while(cin>>n)
    {
        if(n<1||n>9)
    {
        cout<<"输入数据错误"<<endl;
    }
    
        printTopPart(n);
        printBottomPart(n);
    
    }
    
}

8.结果展示

 9.原题目链接

卡码网KamaCodericon-default.png?t=N6B9https://kamacoder.com/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在凌晨等太阳¤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值