**L1-002 打印沙漏 (20分)** c++

易出错的点:
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;
}

5
打印沙漏还是稀里糊涂的
如有不周之处,欢迎大佬前来批评指正

猜你喜欢

转载自blog.csdn.net/qq_44199164/article/details/109096638
今日推荐