使用二维数组输出杨辉三角!

假设打印9行

首先我们可以分析一下:

杨辉三角的形式为 :
                                 1
                                1 1
                               1 2 1
                              ……
可以看出如果只有3行的话 , 第一行的1前面就有3个空格,第二行的1后面就有2个空格,以此类推。
而每两个数之间也有一个空格。所以我们可以用二维数组的形式先输出:
1
11
121
……
然后再加入空格。可以看出没一行的第一个数都是1,并且对角线上也都是1(可以看成为下三角行列式),所以我们可以直接从第三行开始,并且可以看出来从第三行开始不为1的数就等于上一行前面两个数之和(例:2=1+1)。以下就为该方法的代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include<windows.h>

#include<stdio.h>

int main()

{

 int arr[9][9] = { 0 };

 int i, j, k;                                 
{i表示的是行数,j表示的是列数}

 for (i = 0; i < 9; i++)            
 

 {

  for (k = 9 – i; k > 0; k–)        
{这里的操作为输出每一行1前面的空格}

  {

   printf(“%c”, ‘ ‘);

  }                                             

  for (j = 0; j < 9; j++)

  {

   if (j == 0)               
{这一部分输出的是每一行的第一个1}

   {

    arr[i][j] = 1;

   }

   if (i == j)              
  {这一部分输出的是对角线上的1}

   {

    arr[i][j] = 1;

   }

   if ((i>1) && (j > 0))       
{这一部分输出的是第三行之后的其他数字}

   {

    arr[i][j] = arr[i – 1][j – 1] + arr[i – 1][j];

   }

   if (arr[i][j] == 0)             
{因为是二维数组,所以我们不将0输出,即:遇0直接换行}

   {

    printf(“\n”);

    break;

   }

   if (arr[i][j] != 0)              
{这一部分为每个数之前都有一个空格}

   {

    printf(“%c”, ‘ ‘);

   }

   printf(“%2d”, arr[i][j]);

  }

 }

 printf(“\n”);

 system(“pause”);

 return 0;

}

//   1

//  1 1

// 1 2 1

//1 3 3 1

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/ac1171479439/article/details/79705836
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞