目录
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.样例输出:
1121123211234321
1234543211234321123211211
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.原题目链接
卡码网KamaCoderhttps://kamacoder.com/