杨辉

1211:杨辉三角形

℡╲_俬逩灬. 提交于 2020-01-28 03:49:18
这个题目来源于大一学习C++时的一道题(现在还是大一,哈哈) OK,来看题目: 打印杨辉三角形的前10行。杨辉三角形如下图: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 【输入】 无输入 【输出】 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 C++代码实现: # include <bits/stdc++.h> using namespace std ; int a [ 11 ] [ 11 ] ; int main ( ) { int n = 10 ; a [ 1 ] [ 1 ] = 1 ; for ( int i = 2 ; i <= n ; ++ i ) { a [ i ] [ 1 ] = 1 ; a [ i ] [ i ] = 1 ; for ( int j = 2 ; j <= n ; ++ j ) { a [ i ] [ j ] = a [ i - 1 ] [ j - 1 ] + a [ i - 1 ] [ j ] ; } } for ( int i = 1 ; i <= n ; i ++ ) { for ( int j = 1 ; j <=

蓝桥杯 基础练习 杨辉三角形 Python

醉酒当歌 提交于 2020-01-25 08:24:08
问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加 下面给出了杨辉三角形的前4行:    1    1 1    1 2 1   1 3 3 1 给出n,输出它的前n行。 输入格式 输入包含一个数n。 输出格式 输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。 样例输入 4 样例输出 1 1 1 1 2 1 1 3 3 1 数据规模与约定 1 <= n <= 34。 思路: 基础思路就是杨辉三角的特点: 一、每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。 二、第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。 杨辉三角代码中的的关键在于每次打印之后要在列表最后以为加上0这个元素 代码: n = int ( input ( ) ) N = [ 1 ] for m in range ( n ) : #打印10行 for i in range ( len ( N ) ) : if i == len ( N ) - 1 :

基础练习 杨辉三角形

亡梦爱人 提交于 2020-01-22 14:16:01
问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。    它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。    下面给出了杨辉三角形的前4行:    1    1 1    1 2 1    1 3 3 1    给出n,输出它的前n行。 输入格式 输入包含一个数n。 输出格式 输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。 样例输入 4 样例输出 1 1 1 1 2 1 1 3 3 1 数据规模与约定 1 <= n <= 34。 import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int [][]arr=new int[n][n]; for(int i=0;i<n;i++) { arr[i][0]=1; arr[i][i]=1; } if(n>2) { for(int j=2;j<n;j++) { for(int k=1;k<n-1;k++) { arr[j][k]

杨辉三角形

北城以北 提交于 2020-01-21 16:02:08
题目描述 打印杨辉三角形的前10行。杨辉三角形如下图: 1 1 1 1 2 1 1 3 3 1   1 4 6 4 1 输入 无输入。 输出 杨辉三角形前10行,输出格式见样例输出 样例输出 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 代码如下: # include <bits/stdc++.h> using namespace std ; int main ( ) { int a [ 100 ] [ 100 ] ; a [ 1 ] [ 1 ] = 1 ; for ( int i = 1 ; i <= 10 ; ++ i ) { a [ i ] [ i ] = 1 ; a [ i ] [ 1 ] = 1 ; for ( int j = 2 ; j <= i - 1 ; ++ j ) { a [ i ] [ j ] = a [ i - 1 ] [ j ] + a [ i - 1 ] [ j - 1 ] ; } } for ( int i = 1 ; i <= 10 ; ++ i ) { for ( int k = 1 ; k <= 30 - 3 * i ; ++ k

杨辉三角问题——算法

陌路散爱 提交于 2020-01-18 00:58:24
杨辉三角形 问题描述 问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。 下面给出了杨辉三角形的前4行: 1 1 1 1 2 1 1 3 3 1 给出n,输出它的前n行。 输入格式 输入包含一个数n。 输出格式 输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。 样例输入 4 样例输出 1 1 1 1 2 1 1 3 3 1 数据规模与约定 1 <= n <= 34。 问题分析 注意元素的个数为:每行元素等于行数。 两端数字都为1,此数列可用二维数组来存取,且 a[0][0]=1 每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1) 。 代码实现 # include <iostream> # include <bits/stdc++.h> using namespace std ; int main ( ) { int n ; //表行数 cin >> n ; //输入行数 int a [ n ] [ n ] ; //定义足够大范围的数组 for ( int i = 0

杨辉三角_蓝桥杯

此生再无相见时 提交于 2020-01-12 19:00:24
循环 数组 /** 问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。    它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。    下面给出了杨辉三角形的前4行:    1    1 1    1 2 1    1 3 3 1    给出n,输出它的前n行。 输入格式 输入包含一个数n。 输出格式 输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。 样例输入 4 样例输出 1 1 1 1 2 1 1 3 3 1 数据规模与约定 1 <= n <= 34。 */ package jiChuLianXi; import java.util.Scanner; public class PascalTriAngle { public static void PasTAngle(int n){ int arr[][] = new int[(1+n)*n/2+1][(1+n)*n/2+1]; arr[1][1] = 1; if(n>1){ for(int i=2; i<=n; i++){ arr[i][1] = 1; for(int j=2; j<i; j++){ arr[i][j] = arr[i-1][j-1] + arr[i-1][j]; } arr[i][i] = 1;

蓝桥杯 基础练习 杨辉三角

穿精又带淫゛_ 提交于 2019-12-15 14:20:31
基础练习 杨辉三角形 时间限制:1.0s 内存限制:256.0MB 问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。 下面给出了杨辉三角形的前4行: 1 1 1 1 2 1 1 3 3 1 给出n,输出它的前n行。 输入格式 输入包含一个数n。 输出格式 输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。 样例输入 4 样例输出 1 1 1 1 2 1 1 3 3 1 数据规模与约定 1 <= n <= 34。 # include <stdio.h> # define N 34 int main ( void ) { int n , a [ N ] [ N ] , i , j ; scanf ( "%d" , & n ) ; /*给数组各个元素赋值*/ for ( i = 0 ; i < n ; i ++ ) /*i是行*/ { a [ i ] [ 0 ] = a [ i ] [ i ] = 1 ; /*设置第一个与最后一个数为1*/ for ( j = 1 ; j < i ; j ++ ) /*j是列*/ a [ i ] [ j ] = a [ i - 1 ] [ j - 1 ] + a [ i - 1 ] [ j

杨辉三角形

淺唱寂寞╮ 提交于 2019-12-07 19:32:30
这类题目,一般是求第n行长啥样,也有求从第一行打印到第n行的 此处,只做了 第n行长啥样 : #include<stdio.h> #include<string.h> //求 杨辉三角形的第n行长啥样 int a[34]; int b[34]; int main(){ memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); a[1] = 1; a[2] = 1; b[1] = 1; int n; scanf("%d",&n); for(int i = 3;i <= n;i++){ for(int j = 2; j <= i-1;j++){ b[j] = a[j - 1] + a[j]; } b[i] = 1; for(int x = 1; x <= i;x++){ a[x] = b[x]; } } for(int i = 1;i <= n;i++) if(i == 1) printf("%d",a[i]); else printf(" %d",a[i]); return 0; } 思路: 需要两个数组a,b,先将a[1] = 1;a[2] = 1 再求第n行数组长啥样时,可以先以a为基础,计算b的值,然后将b复制进a 由上图的连线可以知道: for(int j = 2; j <= i-1;j++){ b[j] = a[j - 1] + a[j];

【NOIP2011提高组】计算系数

泪湿孤枕 提交于 2019-12-04 06:51:22
计算系数 算法:真·滚动数组模拟!!! 马上CSP/S了,这是远在今年暑假前的一天的校内考试题中的一道。当时做的时候不会组合数,不会二项式定理,不会DP,不会……只知道应该n*n的空间存一个杨辉三角形图,然后依次读取。 然而考场上发现这个可以优化,并滚键盘滚出了下面的那一坨东西居然对了:只需2个数组就可以存下整个题目所需要的杨辉三角形:杨辉三角形的长度和k有关,比如: 3——1 2 1,长度3 4——1 3 3 1,长度4 …… 可见k为奇数,则杨辉三角形长度为奇数,反之为偶数。 我们要求第k层的杨辉三角形。在计算的过程中,下一层需要从上一层的杨辉三角形转移而来(dp思想?!),而上下两层奇偶不同,其长度必然不同,于是我们用2个数组不停滚动,就能正确求得要的那层杨辉三角形。 #include<bits/stdc++.h> using namespace std; int f1=1,f2=1,a,b,k,n,m,ans,yh[1005]= {0,1},yh2[1005]= {0,1}; void yanghui(int x) { if(x%2==0)//层数为偶数 for(int i=2; i<=x+1; i++)//为什么i=2开始?因为杨辉三角形每层的第一个数必定是1 yh2[i]=(yh[i-1]+yh[i])%10007;//从上一层下来 else if(x%2==1)/

杨辉三角形

我们两清 提交于 2019-12-02 10:53:42
杨辉三角形第n层(顶层称第0层,第1行,第n层即第n+1行,此处n为包含0在内的自然数)正好对应于二项式(a+b)^n 展开的系数。例如第二层1 2 1是幂指数为2的二项式(a+b)^2 展开形式a^2 +2ab+b^2 数组解决杨辉三角 # include <stdio.h> # define ROW 10 void yangHui ( ) { int arr [ ROW ] [ ROW ] ; int i ; int j ; for ( i = 0 ; i < ROW ; i ++ ) { for ( j = 0 ; j <= i ; j ++ ) { if ( j == 0 || i == j ) { arr [ i ] [ j ] = 1 ; } else { arr [ i ] [ j ] = arr [ i - 1 ] [ j - 1 ] + arr [ i - 1 ] [ j ] ; } } } for ( int i = 0 ; i < ROW ; i ++ ) { for ( int j = 0 ; j <= i ; j ++ ) { printf ( "%-3d " , arr [ i ] [ j ] ) ; } printf ( "\n" ) ; } } int main ( ) { yangHui ( ) ; } 不用数组来解决杨辉三角问题 #