您的位置:首页 > 其它

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

2018-03-26 22:53 253 查看
假设打印9行

首先我们可以分析一下: 杨辉三角的形式为 :                                 1                                1 1                               1 2 1                              ......可以看出如果只有3行的话 , 第一行的1前面就有3个空格,第二行的1后面就有2个空格,以此类推。而每两个数之间也有一个空格。所以我们可以用二维数组的形式先输出:111121......然后再加入空格。可以看出没一行的第一个数都是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: