C++_洛谷P5732_杨辉三角 题解

   日期:2020-08-24     浏览:174    评论:0    
核心提示:本人第一次写题解,不喜勿喷题目描述给出 n,输出杨辉三角的前 n 行输入格式一行,一个正整数 n(1≤n≤20)输出格式杨辉三角——共 n 行,第 i 行包含 i 个正整数,之间用一个空格隔开。输入样例5输出样例1 1 1 1 2 1 1 3 3 1 1 4 6 4 1关于杨辉三角杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个.

本人第一次写题解,不喜勿喷

题目描述

给出 n,输出杨辉三角的前 n 行

输入格式

一行,一个正整数 n(1≤n≤20)

输出格式

杨辉三角——
共 n 行,第 i 行包含 i 个正整数,之间用一个空格隔开。

输入样例

5

输出样例

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1

关于杨辉三角

杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。
在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。1

思路

将杨辉三角中所有项储存在一个数组num中,如下:

1 1 1 2 1 1 3 3 1 1 4 6 4 1 ……

不难发现,
除第k行第一个和最后一个都是1外,其他的数的表达式为:

num[n]=num[n-k]+num[n-k+1]

所以,我们只需将num[0]、num[1]、num[2]手动赋值,再使用通项公式进行逐项求解即可~

代码

#include<iostream>
using namespace std;
int num[220]={1,1,1};	//用来存放杨辉三角各项的数组
int n=0;	//要输出多少数
int main(){
	int i,t;	// t 为一共多少行
	cin>>t;
	for(i=1;i<=t;i++) n+=i;	//计算 n
	int k=3,tmp=1;
	//k 为行的借记变量(前两行已知)
	//tmp 为一行中第几个数的借记变量
	for(i=3;i<n;i++){
		if(tmp==1||tmp==k) num[i]=1;	//特判是否为第一个或最后一个数
		else num[i]=num[i-k]+num[i-k+1];
		tmp++;
		if(tmp>k){	//换行
			k++;
			tmp=1;	//重置
		}
	}
	k=1;tmp=1;	//重置,准备输出
	for(i=0;i<n;i++){
		cout<<num[i]<<" ";
		tmp++;
		if(tmp>k){
			k++;
			tmp=1;
			cout<<endl;
		}
	}
	return 0;
}

因为第一次写题解,码龄也不算很高,所以程序多少有点粗糙,敬请批判与谅解

  1. 摘自杨辉三角_百度百科 ↩︎

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服