杨辉三角的各种算法实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

Name: 杨辉三角算法集锦

Copyright: 始发于goal00001111的专栏;允许自由转载,但必须注明作者和出处Author: goal00001111

Date: 27-11-08 19:04

Description:

分别使用了二维数组,一维数组,队列,二项式公式,组合公式推论和递归方法等9种算法

算法思路详见代码注释——注释很详细,呵呵

*/

#include

#include

using namespace std;

const int MAXROW = 40;

void PrintBlank(int n);

int Com(int n, int m);

int Try(int row, int cel);

void Fun_1(int row);

void Fun_2(int row);

void Fun_3(int row);

void Fun_4(int row);

void Fun_5(int row);

void Fun_6(int row);

void Fun_7(int row);

void Fun_8(int row);

void Fun_9(int row);

int main()

{

int row;

cin >> row;

Fun_1(row);

cout << endl;

Fun_2(row);

cout << endl;

Fun_3(row);

cout << endl;

Fun_4(row);

cout << endl;

Fun_5(row);

cout << endl;

Fun_6(row);

cout << endl;

Fun_7(row);

cout << endl;

Fun_8(row);

cout << endl;

Fun_9(row);

system("pause");

return 0;

}

//输出n个空格

void PrintBlank(int n)

{

for (int i=0; i

cout << ' ';

}

//使用二维数组输出杨辉三角

void Fun_1(int row)

{

const int DIS = 6;

int blank = 32;

int a[MAXROW][MAXROW] = {0};

for (int i=0; i

{

PrintBlank(blank-=DIS/2);//输出第i行空格

for (int j=0; j<=i; j++)

{

if (j == 0 || j == i)

a[i][j] = 1;

else //规律: 左上与正上元素之和

a[i][j] = a[i-1][j-1] + a[i-1][j];

cout << setw(DIS) << a[i][j];

if (j == i)

cout << endl;

}

}

}

//使用队列输出杨辉三角

void Fun_2(int row)

{

const int DIS = 6;

int max = row + 2;

int blank = 30;

int *a = new int[max];

int front, rear;

front = 0; a[0] = 1;

rear = 1; a[1] = 1;

PrintBlank(blank);//输出第一行空格

while (front != (rear+1)%max)

{

if (a[front] == 1 && a[(front+1)%max] == 1)//到i-1行尾部

{

rear = (rear+1)%max; a[rear] = 1; //第i行尾部

rear = (rear+1)%max; a[rear] = 1; //队尾进入第i+1行

cout << setw(DIS) << 1 << endl; //输出第i-1行尾部

front = (front+1)%max; //对头进入第i行

PrintBlank(blank-=DIS/2);//输出第i行空格

}

//处理中间数据

rear = (rear+1)%max; a[rear] = a[front] + a[(front+1)%max];

if (front != rear)//队列非空时输出

cout << setw(DIS) << a[front]; //输出对头

front = (front+1)%max; //删除对头元素

}

delete []a;

}

//使用两个一维数组代替二维数组输出杨辉三角

void Fun_3(int row)

{

const int DIS = 6;

int blank = 33;

int *a = new int[row]; //存储下一行

int *b = new int[row];//存储输出行

b[0] = 1;

for (int n=1; n<=row; n++)

{

//输出第n行

PrintBlank(blank-=DIS/2);

相关文档
最新文档