首页 > 试题广场 >

打印出以下的杨辉三角形 (要求打印出10行)。 1

[问答题]
打印出以下的杨辉三角形 (要求打印出10行)。
1
1    1
1    2    1
1    3    3    1
1    4    6    4    1
.      .     .     .    .
.      .     .     .     .    .


推荐
解:杨辉三角形各行的系数有以下规律:
(1) 各行第一个数都是1;
(2) 各行最后一个数都是1;
(3) 从第3行起,除上面指出的第一 个数和最后一个数外,其余各数是上一行同列和前一列两个数之和。例如第4行第2个数(3)是第3行第2个数(2)和第3行第1个数(1)之和。可以表示为: a [i] [j] =a [i-1] [j] +a [i-1] [j-1],其中i为行数,j为列数。
N-S图如下所示:
程序如下:
main()
{ int i,j,a[11][11];
 for(i=1;i<11;i++ )
    { a[i][i]=1;
      a[i][1]=1;
 for(i=3;i<11;i++ )
    for(j=2;j<=i-1;j++ )
        a[i][j]=a[i-1][j-1]+a[i-1][j];
 for(i=1;i<11;i++)
    { for(j=1;j<=i;j++ )
        printf(”%6d",a[i][j]);
     printf(" \n ");
    }
printf(" \n ");
}
运行结果:
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

发表于 2018-08-13 20:41:59 回复(0)
public static void main(String[] args) {
        printYanghuiTriangle(10);
    }

    private static void printYanghuiTriangle(int n) {
        int row = 2;
        int col = 0;
        int[][] arr = new int[n][n];
        arr[0][0] = 1;
        arr[1][0] = 1;
        arr[1][1] = 1;
        for (int i = 2; i < n; i++) {
            while (col < n) {
                if (col == 0 || col == row) {
                    arr[row][col] = 1;
                } else {
                    arr[row][col] = arr[row - 1][col] + arr[row - 1][col - 1];
                }
                col++;
            }
            row++;
            col=0;
        }
        System.out.println("打印"+n+"行杨辉三角形为:");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i][j] != 0) {
                    System.out.print(arr[i][j] + "\t");
                }
            }
            System.out.println();
        }
    }

打印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
发表于 2019-09-02 17:29:59 回复(0)
public static void main(String[] args) {
		YanghuiSanjiao(10);
	}
	public static void YanghuiSanjiao(int m ) {
		/**
		 * 这道题我采用了高中的二项分布的方式来进一步
		 * 得出这样的方法
		 * 如果想要知道这个是怎么来的,具体请看
		 * https://blog.csdn.net/weixin_49185464/article/details/123491182?spm=1001.2014.3001.5502
		 */
		
	      int[][] arr = new int[m][m];
	      for(int i=0;i<m;i++) {
	    	  int cur = 1;
	    
		    	  for(int j=0;j<=i;j++){
		    		 arr[i][j]= cur;
		    		  cur = cur * (i-j)/(j+1);
		    		//arr[i][j]=cur; 
		    		  
		    	  }
	    	  
	      }
	      for (int i = 0; i < arr.length; i++) {
	            for (int j = 0; j < arr.length; j++) {
	                if (arr[i][j] != 0) {
	                    System.out.print(arr[i][j] + "\t");
	                }
	            }
	            System.out.println();
	        }
	}
	

发表于 2022-04-03 21:35:36 回复(0)
#include<stdio.h>
int main()
{
    int i, j;
    int a[10][10];
    for (i = 0; i < 10; i++)
    {
        a[i][0] = 1;
        a[i][i] = 1;
    }
    for (i = 2; i < 10; i++)
    {
        for (j = 1; j < i; j++)
        {
            a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
        }
    }
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j <= i; j++)
            printf("%5d", a[i][j]);
        printf("\n");
    }
}
发表于 2019-10-15 14:42:09 回复(0)