易出错的点:
1.打印的是输入字符,不一定是星号;
2.每行的星号后面没有空格,如下图所示
上代码↓
#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
int main()
{
int sum;
cin >> sum;
char c;
cin >> c;
if (sum < 7)
{
cout << c << endl << sum - 1;
return 0;
}
sum -= 1; //最中间的那个有一个*
int line = 1; //一个“*”肯定有一行
int star = 3;
for (star; sum-star*2 >= 0; star += 2)
{
sum -= star * 2;
line++;
}
star -= 2;
//不对称的有line-1行,最外行有star个*
for (int i = 0; i < line; i++) //先打印倒△,带“尖儿”,i表示行数
{
for (int k = 0; k < star-i; k++)
{
if (k < i )
cout << " ";
else
cout << c;
}
cout << endl;
}
for (int i = 1; i <line; i++) //正△,不带“尖儿”,i表示行数
{
for (int k = 0; k <= star/2+i; k++)
{
if (k < star / 2 - i)
cout << " ";
else
cout << c;
}
cout << endl;
}
cout << sum;
return 0;
}
打印沙漏还是稀里糊涂的
如有不周之处,欢迎大佬前来批评指正