原题链接:杨辉三角
解题思路:
             之前我写了一个用找到的规律来写的杨辉三角形的代码,想了一下又想到当初学排列组合数时说杨辉三角形中的数字就是排列组合数,所以用组合数又写了一次。
但是输入行数太大的时候阶乘函数无法返回值,会导致错误,但如果想算较大数字的阶乘也不是不行,最后面有一段代码可以这样算,可是太长,所以分开单列了一下。有兴趣的可以把fun1()这个函数重新编写试一下啊。
参考代码:
#include<iostream>
using namespace std;
long long fun1(int n)                     //阶乘函数,返回n的阶乘
{
	long long sum = 1;
	for (int i = 2; i <= n; i++)
	{
		sum *= i;
	}
	return sum;
}
long long fun2(int m, int n)               //组合数函数,C m取n
{
	return fun1(m) / (fun1(n)*fun1(m - n));
}
void fun3(int m,int n)           //输出空白格函数,m表示二维数组行的下标,n表示行的个数
//这个函数的作用主要是为了让输出的杨辉三角形看起来更对称
{
	for (int i = 1; i <= n - m - 1; i++)
	{
		cout << " ";
	}
}
int main()
{
	int n;
	int a[30][30];
	while(cin>>n)
	{
	   for (int i = 0; i < n; i++)
	    {
		 for (int j = 0; j < i + 1; j++)
		 {
//打印杨辉三角形,给二维数组赋值,每个数都等于它所在行数和列数的组合排列数,C(i取j)		 
			a[i][j] = fun2(i, j);
		 }
	     }
	   for (int i = 0; i < n; i++)
  	   {
		fun3(i, n);
		for (int j = 0; j < i + 1; j++)
		 {
			cout << a[i][j] << " ";
		 }
		cout << endl;
	   }
		cout<<endl;
	}
	return 0;
}
/*************************************************************************************///给出算较大数的阶乘,可以算到千位数的阶乘,用数组来存放数据而不是int或是long long
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int a[3005]={0};//存放阶乘的数字
	a[0] = 1;//数组刚开始表示10000...,就是数字1
	int n, c, sum = 0;
	cin >> n;
	for (int i = 2; i <= n; i++)
	{
		c = 0;
		for (int j = 0; j < 3005; j++)//给每一位数字乘i即2,3,4,5...,直到n,就像我们学习乘法运算时在纸上列的式子
		{
			sum = a[j] * i + c;//某一位的数字乘i,加上c是低位进上来的数字
			a[j] = sum % 10;//这一位的最终数字就是sum除于10的余数,整数部分进上去给高位
			c = sum / 10;//低位给高位的余数
		}
	}
	for (int e = 3004; e>=0; e--)
	{
		if (a[e] != 0)
		{
			for (int w = e; w >=0; w--)
			{
				cout << a[w];
			}
			break;
		}
	}
	cout << endl;
	system("pause");
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
 
#include<iostream> using namespace std; int f(int x) { int a, b = 1; for (a = 1; a <= x; a++) { b *= a; } return b; } void h(int c) { int i, j, d; for (i = 0; i <= c; i++) { for (j = 0; j <= i; j++) { d = f(i) / f(j) / f(i - j); if (i != j) cout << d << " "; else cout << d << endl; } } cout << endl; } int main() { for (;;) { int f; cin >> f; if (f != 0) h(f); else break; } return 0; }