c++杨辉三角【左右对称方法及其实现】

c++杨辉三角【左右对称方法及其实现】,第1张

杨辉三角居中比较复杂,行数越多位数越多,以此我们考虑从下面开始,记录一列最大的位数使上面的数字居中

先看最终效果

我们使用一个“棋盘”储存,将空格也放入其中

(演示就不打0了)

再定义一个二维数组,横向为x轴,竖向为y轴

用  i = x + (y - 1) * (2 * n1 - 1) - 1;将其一一对应

 定义一个长度为2n-1的数组,记录最后两行的位数

写一个函数将数字输出在想输出位数的中间,两边用空格

void shuchu(int n, int m, int lr )		//n为输出的长度,m为输出的数字,lr调整杨辉三角使其对称
{

	int k = weishu(m);
	for (int i = 0; i < (n - k + lr) / 2; i++)
	{
		cout << " ";
	}
	if (m != 0)
	cout << m;
	for (int i = 0; i < (n - k + 1 - lr) / 2; i++)
	{
		cout << " ";
	}	
}

这串代码可以达到如下输出效果,使位数少的数保持居中输出

用数组记录倒数两行的位数,最后遍历“棋盘”输出。

新人代码繁杂,多多见谅,注释还算详细

代码如下

#include 
using namespace std;

//一个返回输入值位数的函数
int weishu(int n)
{
	int i = 0;
	while (n)
	{
		n /= 10;
		i++;
	}
	return i;
}

//一个用于将数字输出在中间位置的函数
void shuchu(int n, int m, int lr )		//lr调整杨辉三角使其对称
{

	int k = weishu(m);
	for (int i = 0; i < (n - k + lr) / 2; i++)
	{
		cout << " ";
	}
	if (m != 0)
	cout << m;
	for (int i = 0; i < (n - k + 1 - lr) / 2; i++)
	{
		cout << " ";
	}	
}


int main()
{
	int n1;
	while (1)
	{
		int* yh;					//记录动态储存空间首位地址
		do
		{
			cout << "输入生成杨辉三角的行数(1> n1;
		} while (n1 < 0 || n1>24);			//使用循环保证输入正确的数字
		//定义x和y便于以二维 *** 控动态储存空间
		//x = 2 * n - 1;						
		//y = n;
		//i=x+(y-1)*(2*n-1)-1
		int x, y;
		yh = new int[(2 * n1 - 1) * n1];				//定义一个二维数组(作为“棋盘”)
		for (y = 1; y <= n1; y++)		//遍历行
		{
			for (x = 1; x <= 2 * n1 - 1; x++)		//遍历一行中的元素
			{
				int i = x + (y - 1) * (2 * n1 - 1) - 1;
				yh[i] = 0;
				if (x == n1 - y + 1 || x == n1 + y - 1)		//识别是否为1的位置
				{
					yh[i] = 1;
					//cout << yh[i]<

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/707588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)