题目描述
输入样例
5
输出样例
....1
...2.1
..3...2
.4.....1
567891011
思路
首先计算等腰三角形的周长,将其所需的字符用一个字符串存储,然后一行一行打印
1.打印腰,共n-1行,定义一个指向字符串的头指针和尾指针,分别用于打印左腰字符和右腰字符
2.打印底,共一行,长度为2n-1
AC代码
#include <iostream>
#include <cstring>
using namespace std;
string s; //存储等腰三角形所需字符
int n;
int main()
{
cin >> n;
int len = 4 * n - 4; //等腰三角形两个腰长n, 底长2n-1,重复三个点(顶点、左下角、右下角),共4n-4
for(int i = 1; ;i ++)
{
s += to_string(i);
if(s.size() >= len) break;
}
while(s.size() > len) s.pop_back(); //此时字符串存储的内容恰好是等腰三角形的所有字符
int be_idx = 0, ed_idx = len - 1; //字符串s首指针,尾指针
//左腰,右腰(从上到下)
for(int i = 0; i < n - 1; i ++)
{
//每一行最开始的'.'
for(int j = n - 1 - i; j > 0; j --) cout << ".";
cout << s[be_idx ++];
//每一行中间的的'.'
if(i)
{
for(int j = 2 * i - 1; j > 0; j --) cout << ".";
cout << s[ed_idx --];
}
cout << endl;
}
//底(从左到右)
for(int i = 0; i < 2 * n - 1; i ++) cout << s[be_idx ++];
return 0;
}
欢迎大家批评指正!!!