c++实现1108: 打印数字图形(函数专题)(正立金子塔和倒立金字塔)

问题描述:

题目描述

从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形。要求在程序中定义并调用函数PrintLine()来输出图形中的一行,该行中的最大数字是m,函数原型如下:

PrintLine(int m);

输入

正整数n(1≤n≤9)。

输出

指定数字图形。

代码实现:

#include <iostream>
using namespace std;
#include<vector>
#include<iomanip>
void computer(int n,int max_value)//计算每一行,n在这里代表n个数.示例:输入5,输出12345
{
    int weight=max_value+n-1;//设置靠左侧设置几个空格的,当n=1,我们需要设置宽度为5,n=2我们需要设置宽度为6,n=3我们需要设置宽度为7

    long long sum=n;
    int ten=1;
    for(int i=n-2;i>=0;i--)//12345
    {
        ten=ten*10;
        sum+=ten*(i+1);
    }

    for(int i=0;i<n-1;i++)//在右侧添加上4321
    {
        sum=sum*10+(n-1-i);
    }
      cout<<setw(weight)<<right<<sum<<endl;

    //return sum;
}
int main() {

    int n;
    cin>>n;
    //正金字塔输出
    for(int i=1;i<=n;i++)
    {
        computer(i,n);
    }
    //倒立金字塔输出
        for(int i=n-1;i>=1;i--)
    {
        computer(i,n);
    }

}

效果展示:

思路解析:

(1)computer函数:输入一个n=5,能够输出左半部分12345

    for(int i=n-2;i>=0;i--)//12345
    {
        ten=ten*10;
        sum+=ten*(i+1);
    }

(2)computer函数:输入一个n=5,能够输出右半部分4321

 for(int i=0;i<n-1;i++)//在右侧添加上4321
    {
        sum=sum*10+(n-1-i);
    }

(3)computer函数:整合(1)和(2)并设置输出左侧空格的宽度

设置宽度:

①对应左侧关系式

 int weight=max_value+n-1;
输入数字n左侧空格数为了达到左侧空格数所需要在setw里面设置的长度
145
236
327
418

也就是说,输入n=4,输出的结果为:“空格1234321”,需要设置setw(8),其中1个为空格,另外7个分别为1234321

②输出表达式

 cout<<setw(weight)<<right<<sum<<endl;

③整合(1)和(2)的完整computer代码

void computer(int n,int max_value)//计算每一行,n在这里代表n个数.示例:输入5,输出12345
{
    int weight=max_value+n-1;//设置靠左侧设置几个空格的,当n=1,我们需要设置宽度为5,n=2我们需要设置宽度为6,n=3我们需要设置宽度为7

    long long sum=n;
    int ten=1;
    for(int i=n-2;i>=0;i--)//12345
    {
        ten=ten*10;
        sum+=ten*(i+1);
    }

    for(int i=0;i<n-1;i++)//在右侧添加上4321
    {
        sum=sum*10+(n-1-i);
    }
      cout<<setw(weight)<<right<<sum<<endl;

    //return sum;
}

(4)computer函数:主函数:外侧循环,输出正立金字塔

//正金字塔输出
    for(int i=1;i<=n;i++)
    {
        computer(i,n);
    }

(5)主函数:外侧循环,输出倒立金字塔

 //倒立金字塔输出
        for(int i=n-1;i>=1;i--)
    {
        computer(i,n);
    }

好啦,希望能够帮助到大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

还不秃顶的计科生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值