比较简单,具体思路看代码注释。
要注意的是输出的空行要求。经过多番尝试得知可行的空行方案为:除了第一个三角形,其他三角形都在上方空一行。评测时输出和输入的顺序没有关系。输出@时跳出while循环即可。
#include
using namespace std;
int main()
{
char str;
int n;
bool state = 0;//记录是不是第一个三角形,第一个三角形输出过后将此值改为1
while (cin >> str)
{
if (str == '@')break;
else
{
if(state==1)
cout << endl;
cin >> n;//输入行数
for (int i = 1; i <= n; i++)//循环行数次,i等于几就是第几行
{
for (int j = 1; j <= n - i; j++)//输出左方空格,n行时第i行输出n-i个
cout << " ";
if (i != n)//在没输出到最后一行时执行下方代码
{
for (int j = 1; j <= 2 * i - 1; j++)//循环2i-1次
{
if (j == 1 || j == 2 * i - 1)//在第一次循环和最后一次循环时输出str,其他次循环输出空格
cout << str;
else cout << " ";
}
}
else//在输出到最后一行时执行下方代码
{
for (int j = 1; j <= 2 * i - 1; j++)
cout << str;
}
cout << endl;
}
state = 1;
}
}
return 0;
}