C++:利用【函数】的形式——画正三角形、倒三角形

版权声明:转载本文请引用 https://blog.csdn.net/weixin_42346564/article/details/82190984

1.普通代码

#include <iostream>

using namespace std;

int main() 
{
    int n;//行数
    cout << "请输入正三角形的层数: n=  " ;
    cin>>n;
    if (n)//n:层数
    {
    	for (int i = 1; i <= n; i++) //i:从第一层到第n层
    	{
	    	for (int k = 0; k < n-i; k++) //k:kongge空格
	    	{
	    		cout << " ";
	    	}
	    	for (int j = 0; j < 2 * i - 1; j++) 
	    	{
	    		cout << "*";
	    	}
	    	cout << endl;
	    }
    }
}

2.

///////////////////////////////////////////////////
//正三角形
//    * 
//  * * *
//* * * * *
//////////////////////////////////////////////////
#include <iostream>

using namespace std;

int CalcStarCount(int layer)
{
	return (2 * layer - 1);
}

void DrawStar(int maxLayer, int layer)
{
	int maxStarCnt = CalcStarCount(maxLayer);			// 最大层 * 的个数
	int starCnt = CalcStarCount(layer);					// 当前层 * 的个数

	int blankCnt = maxStarCnt - starCnt;				// 当前层空格的个数
	int pointCnt = blankCnt / 2;						// 两端空格的个数

	// 先画空格
	for (int i = 0; i < pointCnt; i++)
	{
		cout << " ";
	}
	// 再画*
	for (int i = 0; i < starCnt; i++)
	{
		cout << "*";
	}
	// 先画空格
	for (int i = 0; i < pointCnt; i++)
	{
		cout << " ";
	}
	cout << endl;
}

void Sleep(long time)
{
	for (int i = 0; i < time; i++)
		for (int j = 0; j < 100000; j++)
			;
}

void DrawStar2(int maxLayer, int layer, int dirc)
{
	if (dirc)
	{
		if (layer >= 1)
		{
			DrawStar2(maxLayer, --layer, dirc);
		}
		else
			return;
	}

	 //具体画 * 的过程

	if (layer && layer != maxLayer)
	{
		int starCnt = layer;
		int maxRowCnt = maxLayer * 2 - 1;
		int pointCnt = (maxRowCnt - 2 * starCnt - 1) / 2;

		// 画左端的空格
		for (int i = 0; i < pointCnt; i++)
		{
			cout << "_";
			Sleep(1000);
		}

		for (int i = 0; i < layer; i++)
		{
			cout << "*";
			if (i == layer - 1)
				break;
			else
				cout << " ";
			Sleep(1000);
		}

		// 画右端的空格
		for (int i = 0; i < pointCnt; i++)
		{
			cout << "_";
			Sleep(1000);
		}

		cout << endl;
	}

	if (!dirc)
	{
		if (layer >= 1)
		{
			DrawStar2(maxLayer, --layer, dirc);
		}
		else
			return;
	}
}

int main() 
{
	
	int layer = 0;

	cout << "请输入层数: ";
	cin >> layer;

#if 0
	for (int i = 0; i <= layer; i++)
		DrawStar(layer, i);

	cout << endl << endl;

	for(int i = layer; i >= 0; i--)
		DrawStar(layer, i);
#else
	DrawStar2(layer + 1, layer + 1, 1);
	cout << endl << endl;
	DrawStar2(layer + 1, layer + 1, 0);
#endif

	system("pause");
	return 0;
}	

猜你喜欢

转载自blog.csdn.net/weixin_42346564/article/details/82190984
今日推荐