题目描述
从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形。要求在程序中定义并调用函数PrintLine()来输出图形中的一行,该行中的最大数字是m,函数原型如下:
PrintLine(int m);
输入
正整数n(1≤n≤9)。
输出
指定数字图形。
样例输入 Copy
5
样例输出 Copy
1
121
12321
1234321
123454321
1234321
12321
121
1
源码:
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
//此方法得到回文数的减一位 例输入12345得到4321
string inverse(string n1) {
string n = n1.substr(0, n1.length() - 1);
reverse(n.begin(), n.end());
return n;
}
//输出上半部分
void PrintLineUP(string n1,string out,int n) {
//out为正序,n1为 inverser()返回的逆序减一位
string n2 = out + n1;
for (int i = 1; i < n; i++)
{
//循环输出空格,达到题目格式要求
//依次输出n-1个空格,n-2个空格,...
cout << " ";
}
cout << n2 << endl; ;
}
//输出下半部分
void PrintLinedown(string n2,string in,int IN_i,int n) {
string n3 = in + n2;
for (int i = 1;i <=n-IN_i ;i++) {
//依次输出1个空格,2个空格....
cout << " ";
}
cout << n3 << endl;
}
int main() {
int n;
cin >> n;
string out;
int l = n;
string a[11];
//此循环输出上部分外加中间部分
for (int i = 1; i <= n; i++)
{
out += to_string(i);
a[i] = out;
PrintLineUP(inverse(out), out, l);
l--;
}
//此循环只输出下半部分
for (int i = n-1; i>=1; i--)
{
PrintLinedown(inverse(a[i]),a[i],i,n);
}
}