使用循环列表生成杨辉三角

使用循环列表生成杨辉三角的思想应该是比较简单的,设置一个循环列表,通过每次迭代生成每一层的数值。要注意的有下面两点:
 
1、此处使用一个循环列表来逐次生成杨辉三角的每一层。其中,left值先取得列表的头一个数据,之后把这个数据pop掉,right再获得一个头数据(其实是left后面的一个数据),left值用来保存左肩数值,right值保存右肩数值。然后每次将两肩的数值相加后入队(新入队的值总是在上一层的结束符0的后面)。要注意,真正遍历并且输出每层的数值的是right值。
 
2、在每一次迭代中,要保证迭代开始前列表两端的数据为0,左边的0用来保证能够right值能从第一个有效值开始输出。右边的0用来判断是不是当前层迭代结束。
 
代码如下:
#include "stdafx.h"
#include<iostream>
#include<queue>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{	
	cout<<("请输入希望的三角层数:")<<endl;
	int num=0;
	cin>>num;
	cout<<("您输入的是:")<<num<<endl;
	cout<<'1'<<endl;
	queue<int> cyc;
	int left,right;
	left=right=0;
	cyc.push(0);     //设置循环队列首部有一个0,从而使得right值能都得到第一个有效数值
	cyc.push(1);
	cyc.push(1);     //初始循环队列为 0,1,1,这是开始迭代钱的初始值,以后每次由right值遍历有效数字并输出,right值为0时说明当前层输出完毕
	
	for(int floor=1;floor<num;floor++){
		
		cyc.push(0);     //每一次开始迭代之前,保证上一层尾部设置标志0
		do{
		    left=cyc.front();
		    if(!cyc.empty())
			cyc.pop();
		    right=cyc.front();
		    if(right!=0)
			cout<<right<<' ';
		    else
			cout<<endl;
		    cyc.push(left+right);
		}while(right!=0);     //right值取到0,说明当前层已经输出完毕
		
	}//end for

	system("pause");
	return 0;
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值