杨辉三角形算法

【项目 2-杨辉三角】编写程序,打印出以下形式的扬辉三角形。杨辉三角是一个由数字排列成的三角形数表,一般形式如下:

             1
         1 1
        1 2 1
       1 3 3 1
      1 4 6 4 1
     1 5 10 10 5 1

    ......................................................

杨辉三角最本质的特征是,它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和。   一、使用一维数组:据“F(x)=F(x)+F(x-1)”计算。此算法比较快,但数据受数组大小限制。可以将杨辉三角形的值放在一个方形矩阵的下半三角中,如果需打印 7 行杨辉三角形,应该定义等于或大于 7X7 的方形矩阵,只是矩阵的上半部和其余部分并不使用。

杨辉三角形具有如下特点:

  • 第 0 列和对角线上的元素都为 1。
  • 除第 0 列和对角线上的元素以外,其它元素的值均为前一行上的同列元素和前一列元素之和。

代码:

// 杨辉三角形算法.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>

using namespace std;
int factorial(int n);
int combine(int a, int b);
void space(int t, int line);

int _tmain(int argc, _TCHAR* argv[])
{
	int line;
	cout<<"Please Input the line number :";
	cin>>line;

	while(line!=-1){
		for( int i=1;i<line;i++){
			space(i,line);
			for(int j =0; j<i; j++){
				cout << combine(j, i-1)<<"  ";
			}
			cout<<endl;
		}
		cout <<endl<<" Please Input the line number: (enter -1 to quit) ";
		cin>>line;
	}
	return 0;
}

int factorial(int n){
	int i =1;
	int product =1;
	while(i<=n){
		product =product*i;
		i++;
	}
	return product;
}

int combine(int a, int b){
	int result;
	if( a==0||b==0)
		return 1;
	else
		result = factorial(b)/(factorial(a)*factorial(b-a));
	return result;
}
void space ( int t, int line){
	for(int p =1; p<=(line-t);p++)
		cout <<" ";
}

输出结果:

杨辉三角形算法_第1张图片

转载请注明出处:http://blog.csdn.net/utimes/article/details/8453961

你可能感兴趣的:(面试题,杨辉三角形算法)