杨辉三角的各种算法实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);