题目 2282: [蓝桥杯][2018年第九届真题]等腰三角形
时间限制: 1Sec 内存限制: 128MB 提交: 41 解决: 33
题目描述
本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:
-
先用1,2,3,…的自然数拼一个足够长的串
-
用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
比如,当三角形高度是8时:
1
2 1
3 8
4 1
5 7
6 1
7 6
891011121314151
显示不正确时
输入
一个正整数n(3<n<300),表示三角形的高度
输出
用数字填充的等腰三角形。
为了便于测评,我们要求空格一律用"."代替。
样例输入
5
样例输出
....1
…2.1
…3…2
.4…1
567891011
#include<iostream>
#include<algorithm>
using namespace std;
int dfs(int &a)
{
int x;
if(a<10)
{
x=a;
a/=10;
return x;
}
if(a<100&&a>=10)
{
x=a/10;
a=a%10;
return x;
}
}
int main()
{
int n;
cin>>n;
int w=3*n;
int cns=1;
int str[1005];
for(int i=1;i<=w;i++)
{
if(i%10==0)
{
str[cns++]=(i/10);
str[cns++]=0;
continue;
}
int z=i;
while(z>0)
{
str[cns++]=dfs(z);
}
}
int ans=4*(n-1);
int tns=1;
int i,j,k;
for(int i=1;i<=n;i++)
{
for(int k=n-i;k>=1;k--)
{
cout<<'.';
}
for(int j=i*2-1;j>=1;j--)
{
if(j==i*2-1)
{
cout<<str[tns++];
}
else if(j==1)
{
cout<<str[ans--];
}
else if(i==n)
{
cout<<str[tns++];
}
else cout<<'.';
}
cout<<endl;
}
return 0;
}