使用循环列表生成杨辉三角的思想应该是比较简单的,设置一个循环列表,通过每次迭代生成每一层的数值。要注意的有下面两点:
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;
}