问题描述:
题目描述
从键盘输入一个整数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里面设置的长度 |
1 | 4 | 5 |
2 | 3 | 6 |
3 | 2 | 7 |
4 | 1 | 8 |
也就是说,输入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);
}
好啦,希望能够帮助到大家!