杨辉三角

杨辉三角形

孤者浪人 提交于 2020-02-29 02:52:59
问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。下面给出了杨辉三角形的前4行:  1 1 1 1 2 1 1 3 3 1 给出n,输出它的前n行。 输入格式 输入包含一个数n。 4 输出格式 输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。 1 1 1 1 2 1 1 3 3 1 数据规模与约定 1 <= n <= 34。 代码 # include <iostream> using namespace std ; int main ( ) { int n , m ; cin >> n ; int a [ 50 ] , b [ 50 ] ; for ( int i = 1 ; i <= n ; i ++ ) { for ( int j = 0 ; j < i ; j ++ ) { if ( j == 0 || j == i - 1 ) { printf ( "1 " ) ; b [ j ] = 1 ; } else { b [ j ] = a [ j ] + a [ j - 1 ] ; printf ( "%d " , b [ j ] ) ; } } for ( int j = 0 ; j < i ; j ++ ) {

leetcode 118 杨辉三角 C语言

a 夏天 提交于 2020-02-28 21:55:26
题目 leetcode 118 代码 int * * generate ( int numRows , int * returnSize , int * * returnColumnSizes ) { * returnSize = 0 ; int * * res = ( int * * ) malloc ( sizeof ( int * ) * numRows ) ; ( * returnColumnSizes ) = ( int * ) malloc ( sizeof ( int ) * numRows ) ; for ( int i = 0 ; i < numRows ; i ++ ) { res [ * returnSize ] = ( int * ) malloc ( sizeof ( int ) * ( i + 1 ) ) ; res [ * returnSize ] [ 0 ] = 1 ; int k = i - 1 ; for ( int j = 1 ; j < i ; j ++ ) { res [ * returnSize ] [ j ] = res [ k ] [ j - 1 ] + res [ k ] [ j ] ; } res [ * returnSize ] [ i ] = 1 ; ( * returnColumnSizes ) [ * returnSize

试题 基础练习 杨辉三角形

淺唱寂寞╮ 提交于 2020-02-27 15:33:57
总结 使用 while 循环的时候,自加的边界不能忘了 memcpy(temp, priTemp, sizeof(priTemp)); 第三个参数是被复制的字节数。 文档:https://www.runoob.com/cprogramming/c-function-memcpy.html 思路 只需要下一层根据上一层输出就可以了 # include <iostream> using namespace std ; int main ( ) { int temp [ 35 ] = { 0 } ; int priTemp [ 35 ] = { 0 } ; temp [ 0 ] = 1 ; temp [ 1 ] = 2 ; temp [ 2 ] = 1 ; int n ; scanf ( "%d" , & n ) ; if ( n == 1 ) { printf ( "1" ) ; } else if ( n == 2 ) { printf ( "1\n1 1" ) ; ; } else { printf ( "1\n1 1\n1 2 1\n" ) ; for ( int i = 3 ; i < n ; ++ i ) { int j = 0 ; while ( * ( temp + j ) != 0 ) { if ( j - 1 < 0 ) { priTemp [ 0 ] = 1 ; j

【LeetCode】 118. 杨辉三角

浪子不回头ぞ 提交于 2020-02-17 15:04:20
题目 题目传送门: 传送门(点击此处) 题解 我的题解 因为第一行和第二行比较特殊,所以我单独存的 class Solution { public List < List < Integer > > generate ( int numRows ) { if ( numRows == 0 ) return new ArrayList < > ( ) ; List < Integer > list = new ArrayList < > ( ) ; List < List < Integer > > lists ; if ( numRows == 1 ) { lists = new ArrayList < > ( ) ; list . add ( 1 ) ; } else if ( numRows == 2 ) { lists = generate ( numRows - 1 ) ; list . add ( 1 ) ; list . add ( 1 ) ; } else { lists = generate ( numRows - 1 ) ; List < Integer > temp = lists . get ( numRows - 2 ) ; list . add ( 1 ) ; for ( int i = 0 ; i < numRows - 2 ; i ++ ) {

C语言经典例61-杨辉三角

我们两清 提交于 2020-02-17 06:55:11
目录 1 题目 2 分析 2.1 方法1-二项式定理 2.2 方法2-按规律 3 实现 3.1 实现1-二项式定理 3.2 实现2-按规律 4 运行结果 1 题目 打印出杨辉三角形(要求打印出10行) 2 分析 杨辉三角结构如下所示: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 2.1 方法1-二项式定理 第一眼看到杨辉三角很容易可以想到高中的数学知识–二项式定理 ( a + b ) n (a+b)^n ( a + b ) n ,当 n n n 从 0 0 0 开始,它的展开式每项的系数恰好对应杨辉三角的每一行。 那么,算出每一项的系数可以通过公式,递归计算阶层,见 实现1 2.2 方法2-按规律 根据杨辉三角的特点: 每行端点与结尾的数为1 每个数等于它上方两数之和 见 实现2 3 实现 3.1 实现1-二项式定理 # include <stdio.h> # define N 10 // 打印的行数 int fact ( int n ) { if ( n == 1 || n == 0 ) { return 1 ; } return n * fact ( n - 1 ) ; } int main ( ) { for ( int i = 0 ; i < N ; i ++ ) { for ( int j = 0 ; j <= i ; j ++ ) { /

【蓝桥杯】杨辉三角形

强颜欢笑 提交于 2020-02-15 11:21:34
问题描述 杨辉三角形又称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 # include <stdio.h> int main ( ) { int n , i , j ; scanf ( "%d" , & n ) ; int a [ n ] [ 34 ] ; for ( i = 0 ; i < n ; i ++ ) for ( j = 0 ; j < 34 ; j ++ ) { a [ i ] [ j ] = 0 ; a [ i ] [ 0 ] = 1 ; } printf ( "1 \n" ) ; for ( i = 1 ; i < n ; i ++ ) { printf ( "1 " ) ; for ( j = 1 ; j < 34 ; j ++ ) { a [ i ] [ j ] = a [ i - 1 ] [ j ] + a [ i - 1 ] [ j - 1 ] ; if ( a

Java编写杨辉三角

五迷三道 提交于 2020-02-15 02:16:14
前言 何为杨辉三角? 每个数等于它上方两数之和。 每位数字左右对称,由1开始逐渐变大。 第n行有n项。 实现过程:以5行5列的等腰三角为例推导 1.创建多个不同长度的二位数组 1.1 五行五列的直角三角形,需要注意数组的下标比行数小1。 1.2 每一行的个数逐渐加一,即二位数组的低维下标依次加一,往每行分配空间。yh[i]表示高维数组。yh[0]=new int[1];往第一行分配1个存储空间,依次继续则第四行分配5个存储空间。 示意图: //0 //00 //000 //0000 //00000 int rows = 5 ; int [ ] [ ] yh = new int [ rows ] [ ] ; for ( int i = 0 ; i < rows ; i ++ ) { //创建多个不同长度的二位数组 yh [ i ] = new int [ i + 1 ] ; } 2.完成初始值赋值 2.1 循环每一行,小于高维数组的长度即可,从第一行开始到第五行。 2.2 为每一行前尾都赋值1,可观察到第几行就有第几个数值。例如:第四行的第一位数表示为yh[3][0]=1,最后位数为yh[3][3]=1。则循环行数就能完成赋值。 示意图: //1 //11 //101 //1001 //10001 for ( int i = 0 ; i < yh . length ; i ++ )

算法之旅——杨辉三角

我的未来我决定 提交于 2020-02-13 09:22:28
  杨辉三角又称为贾宪三角形,是 二项式系数 在三角形中的一种几何排列。   杨辉三角形拥有以下几点性质: 每行数字左右对称,从1开始,从左到右依次增大,然后依次减小,最后回到1。 n行中的数字个数为n个。 第n行数字和为2^(n-1)。 每个数字等于上一行的左右两个数字之和。可用此性质写出整个 帕斯卡三角形 。 将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第2n个斐波那契数。 将第2n行第2个数,跟第2n+1行第4个数、第2n+2行第6个数……这些数之和是第2n-1个斐波那契数。 第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3…依此类推。 两个未知数和的n次方运算后的各项系数依次为杨辉三角的第n行。   以下为打印一个杨辉三角形的简单算法: 1 import java.util.Scanner; 2 public class YanghuiTriangle { 3 public static void main(String[] args) { 4 int num; 5 num = 0; 6 System.out.println("please input yanghui Triangle number 1of plies:");

杨辉三角算法改进

a 夏天 提交于 2020-02-13 09:21:19
/* * date:2011-2-15 * create by zhoulq */ #include <stdio.h> #include <string.h> //杨辉三角 void ptr(int n) { int **arc;//申明一个指向指针的指针(相当于一个不规则的二位数组) int i,j; arc=(int**)malloc(sizeof(int)*n);//开辟n行 for(i=0;i<n;i++) { *arc=(int*)malloc(sizeof(int)*(i+1));//在第i行上开辟i+1列 //列赋值 for(j=0;j<i+1;j++) { if(j==0||j==i) { *(*arc+j)=1; } else { *(*arc+j)=*(*(arc-1)+j-1)+*(*(arc-1)+j);//*(arc-1) 表示的是上一行的行地址变换为该行(上一行)的首列地址 } printf(" %d",*(*arc+j)); } printf("\n"); arc++;//行变换 } } void main() { ptr(8); } 来源: https://www.cnblogs.com/kingge/archive/2011/02/16/1956126.html

二维数组的应用(杨辉三角)

会有一股神秘感。 提交于 2020-02-13 09:21:01
import java.util.Scanner; /** * @author Jocany *代码:杨辉三角 */ public class ArrayTest3 { // 分析: // A:任何一行的第一列和最后一列都是1 // B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。 public static void main(String[] args) { //键盘输入行数 System.out.println("请输入一个数字:"); Scanner sc=new Scanner(System.in); int n = sc.nextInt(); //定义一个二维数组 int [][]arr=new int[n][n]; //确定任何一行的第一列和最后一列都是1,用二维数组遍历 for (int i = 0; i < arr.length; i++) { arr[i][0]=1; arr[i][i]=1; } //行 for (int i = 2; i < arr.length; i++) { //列 for (int j = 1; j <=i-1; j++) { //第三行开始每一个数据都是它前一行的前一列与前一行的本列之和; arr[i][j]=arr[i-1][j-1]+arr[i-1][j]; } } //遍历数组 for (int i = 0;