题目描述
本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:
-
先用 1,2,3... 的自然数拼一个足够长的串
-
用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
比如,当三角形高度是 8 时,如下图:
输入描述
输入一个正整数 \ n(3<n<300) n(3<n<300),表示三角形的高度。
输出描述
输出对应的三角形。
输入输出样例
示例
输入
5
输出
....1
...2.1
..3...2
.4.....1
567891011
#include<bits/stdc++.h>
using namespace std;
string t_string(int k)//int转string
{
stringstream ss;
ss << k;
return ss.str();
}
int sum2; //用来从后往前找
string str; //字符串
void suml() //算出来需要的东西
{
int sum = (a-1)*4 ; //算需要多少个
sum2=sum-1; //最后一个号会少一
for(int i=1;i<=sum;i++)
{
str=str+t_string(i);
}
str=str.substr(0,sum);
}
int a;
int a2=a,a3,k=0;
int lum1; //用来从后往前找
int e1=0,e2=0,c2=sum2; //e1 是中间的逗号
int kz=0;// 用来判断中间符号
int main()
{
cin>>a;
suml();
for(int i=1;i<=a;i++)
{
a2=a2-1; //每一次少一个
a3=a2; //赋予它
e2=e1; //中间的 . 号
for(int j=1;;j++)
{
if(i==1) //第一次
{
if(a3==0)
{
cout<<str[k]; k++; break;
}
else {cout<<"."; a3--;}
}
else if(i==a&&lum1<a*2-1) //最后一次
{
lum1++;
cout<<str[k]; k++;
if(lum1==a*2-1) return 0; //如果等于他就结束程序
}
else //其他区间
{
if(kz==0)
{
if(a3==0)
{
kz=1; //控制下面的
cout<<str[k]; k++;
}
else{cout<<"."; a3--;}
}
else
{
//if(i==6) cout<<"e2:"<<e2<<" ";
if(e2==0)
{
kz=0;
cout<<str[c2]; c2--; break;
}
else{cout<<"."; e2--;}
}
}
}
cout<<endl;
if(i==1) {e1++;}
else {e1=e1+2;} //只有第一次是加1其他时候是2
}
}