题目描述
本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:
1. 先用1,2,3,...的自然数拼一个足够长的串
2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
比如,当三角形高度是8时:
1
2 1
3 8
4 1
5 7
6 1
7 6
891011121314151
显示不正确时,参看:p1.png
输入
输入,一个正整数n(3<n<300),表示三角形的高度
输出
输出,用数字填充的等腰三角形。
为了便于测评,我们要求空格一律用"."代替。
样例输入
例如: 输入: 5 再例如: 输入: 10 再例如: 输入: 15
样例输出
程序应该输出: ....1 ...2.1 ..3...2 .4.....1 567891011 程序应该输出: .........1 ........2.2 .......3...2 ......4.....2 .....5.......1 ....6.........2 ...7...........0 ..8.............2 .9...............9 1011121314151617181 程序应该输出: ..............1 .............2.3 ............3...2 ...........4.....3 ..........5.......1 .........6.........3 ........7...........0 .......8.............3 ......9...............9 .....1.................2 ....0...................8 ...1.....................2 ..1.......................7 .1.........................2 21314151617181920212223242526
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<vector>
#include<cmath>
const int maxn=1e5+5;
typedef long long ll;
using namespace std;
int a[1000005];
int main(){
int n,len=0;
cin>>n;
for(int i=1;i<10005;i++){
int tmp=i,temp[1005],l=0;
while(tmp){
temp[l]=tmp%10;
tmp=tmp/10;
l++;
}//取出每一位
for(int j=l-1;j>=0;j--){
a[len]=temp[j];
len++;
}//当有很多位时,倒序
if(len>=4*n-4)
break;
}
//cout<<len<<endl;
/*for(int i=0;i<len;i++){
cout<<a[i];
}*/
//cout<<endl;
for(int i=0;i<n-1;i++)
cout<<".";
cout<<a[0]<<endl;//第一行
for(int i=1;i<n-1;i++){
for(int j=n-i-2;j>=0;j--)
cout<<".";
//cout<<" ";
cout<<a[i];
for(int j=0;j<2*i-1;j++)
cout<<".";
cout<<a[4*n-4-i];
cout<<endl;
}
for(int i=n-1;i<3*n-2;i++)
cout<<a[i];//最后一行
cout<<endl;
return 0;
}