杨辉三角形是形如:
1
1   1
1   2   1
1   3   3   1
1   4   6   4   1
的三角形,其实质是二项式(a+b)的n次方展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一行里相邻两个数之和。这个题目常用于程序设计的练习。
下面给出六种不同的解法。
解法一
#include   <stdio.h>
main()
{ int i,j,n=0,a[17][17]={0};
   while(n<1 || n>16)
   { printf("请输入杨辉三角形的行数:");
     scanf("%d",&n);
   }
   for(i=0;i<n;i++)
     a[i][0]=1;      
   for(i=1;i<n;i++)
     for(j=1;j<=i;j++)
       a[i][j]=a[i-1][j-1]+a[i-1][j];
   for(i=0;i<n;i++)   
   { for(j=0;j<=i;j++)
       printf("%5d",a[i][j]);
     printf("\n");
   }
}
点评:解法一是一般最容易想到的解法,各部分功能独立,程序浅显易懂。
解法二
#include   <stdio.h>
main()
{ int i,j,n=0,a[17][17]={1};
   while(n<1 || n>16)
   { printf("请输入杨辉三角形的行数:");
     scanf("%d",&n);
   }
   for(i=1;i<n;i++)
   { a[i][0]=1;             
     for(j=1;j<=i;j++)
       a[i][j]=a[i-1][j-1]+a[i-1][j];  
   }
     for(i=0;i<n;i++)           
     { for(j=0;j<=i;j++)
         printf("%5d",a[i][j]);
       printf("\n");
     }
}
点评:解窢二是在解法一的基础上,把第一列置为1的命令移到下面的双重循环中,减少了一个循环。注意初始化数组的变化。
解法三
#include   <stdio.h>
main()
{ int i,j,n=0,a[17][17]={0,1};
   while(n<1 || n>16)
   { printf("请输入杨辉三角形的行数:");
     scanf("%d",&n);
   }
   for(i=1;i<=n;i++)
   for(j=1;j<=i;j++)
     a[i][j]=a[i-1][j-1]+a[i-1][j];  
   for(i=1;i<=n;i++)          
   { for(j=1;j<=i;j++) printf("%5d",a[i][j]);
      printf("\n");
   }
}
点评:解法三是在解法一、二的基础上,把第一列置为1的命令去掉了,注意初始化数组的变化。
解法四
#include   <stdio.h>
main()
{ int i,j,n=0,a[17][17]={0,1};
   while(n<1 || n>16)
   { printf("请输入杨辉三角形的行数:");
     scanf("%d",&n);
   }
   for(i=1;i<=n;i++)
   { for(j=1;j<=i;j++)
     { a[i][j]=a[i-1][j-1]+a[i-1][j];  
       printf("%5d",a[i][j]);   
     }
     printf("\n");
   }
}
点评:解法四是在解法三的基础上,把计算和打印合并在一个双重循环中。
解法五
#include <stdio.h>
main()
{ int i,j,n=0,a[17]={1},b[17];
   while(n<1 || n>16)
   { printf("请输入杨辉三角形的行数:");
     scanf("%d",&n);
   }
   for(i=0;i<n;i++)
   { b[0]=a[0];
     for(j=1;j<=i;j++)
        b[j]=a[j-1]+a[j];  
     for(j=0;j<=i;j++)           
     { a[j]=b[j];  
       printf("%5d",a[j]);
     }
     printf("\n");
   }
}
点评:解法一到解法四都用了二维数组,占用的空间较多。而解法五只使用了两个一维数组。
解法六
#include   <stdio.h>
main()
{ int i,j,n=0,a[17]={0,1},l,r;
   while(n<1 || n>16)
   { printf("请输入杨辉三角形的行数:");
     scanf("%d",&n);
   }
   for(i=1;i<=n;i++)
   { l=0;
     for(j=1;j<=i;j++)
     { r=a[j];
       a[j]=l+r;  
       l=r;
       printf("%5d",a[j]);  
     }
     printf("\n");
   }
}
点评:解法六只使用了一个一维数组和两个临时变量。

一天一个算法:C语言解答杨辉三角的更多相关文章

  1. C语言打印杨辉三角(2种方法)

    杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一. ...

  2. Leecode刷题之旅-C语言/python-118杨辉三角

    /* * @lc app=leetcode.cn id=118 lang=c * * [118] 杨辉三角 * * https://leetcode-cn.com/problems/pascals-t ...

  3. java语言编写杨辉三角

    package com.llh.demo; /** * 杨辉三角 * * @author llh * */ public class Test { /* * 杨辉三角 */ public static ...

  4. C语言118. 杨辉三角

    给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5输出:[ [1], [1,1], [1,2,1], [1, ...

  5. C语言复习---杨辉三角打印

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math ...

  6. Python之杨辉三角算法实现

    学习了廖雪峰的官方网站的python一些基础,里面有个题目,就是让写出杨辉三角的实现,然后我就花了时间实现了一把.思路也很简单,就是收尾插入0,然后逐层按照杨辉三角的算法去求和实现杨辉三角. 附属代码 ...

  7. 杨辉三角(Pascal Triangle)的几种C语言实现及其复杂度分析

    说明 本文给出杨辉三角的几种C语言实现,并简要分析典型方法的复杂度. 本文假定读者具备二项式定理.排列组合.求和等方面的数学知识. 一  基本概念 杨辉三角,又称贾宪三角.帕斯卡三角,是二项式系数在三 ...

  8. 杨辉三角(C语言)

    杨辉三角 杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,帕斯卡(1623----1662)在1654年发现这一规律, ...

  9. 基于visual Studio2013解决C语言竞赛题之0509杨辉三角

     题目

随机推荐

  1. 杂项-DB:DW/DWH(数据仓库)

    ylbtech-杂项-DB:DW/DWH(数据仓库) 数据仓库,英文名称为Data Warehouse,可简写为DW或DWH.数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合. ...

  2. BZOJ 4129 树上带修莫队+线段树

    思路: 可以先做做BZOJ3585 是序列上的mex 考虑莫队的转移 如果当前数字出现过 线段树上把它置成1 对于询问 二分ans 线段树上查 0到ans的和 是不是ans+1 本题就是把它搞到了序列 ...

  3. 立即执行函数与Function

    js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 与new Function()区别? new Function() 还是有区别的,fn = ne ...

  4. DevExpress Report 打印提示one or more margins are set outside the printable area of the page 问题解决

    DevExpress  Report Print的时候,出现这样的问题:one or more margins are set outside the printable area of the pa ...

  5. 一个关于传参数js数组的封装方法(寄生模式)

    function createArr(){ var arr = new Array(); arr.push.apply(arr,arguments); arr.toJoin = function(){ ...

  6. Android 7.0 Gallery图库源码分析4 - SlotView手势监听及页面跳转

    上篇文章讲了初始化View时会实例化一个SlotView并监听其事件,至于它是怎么实现的,用的是Android自带的GestureDetector. GestureDetector是Android自带 ...

  7. python中方法与函数的区别与联系

    今天huskiesir在对列表进行操作的时候,用到了sorted()函数,偶然情况下在菜鸟教程上看到了内置方法sort,同样都可以实现我对列表的排序操作,那么方法和函数有什么区别和联系呢? 如下是我个 ...

  8. poj 3311 Hie with the Pie (状压dp) (Tsp问题)

    这道题就是Tsp问题,稍微加了些改变 注意以下问题 (1)每个点可以经过多次,这里就可以用弗洛伊德初始化最短距离 (2)在循环中集合可以用S表示更清晰一些 (3)第一维为状态,第二维为在哪个点,不要写 ...

  9. Git:与eclipse搭配使用

    Git:与eclipse搭配使用 1)工程初始化为本地库 工程 ——>右键 ——>Team ——Share Project 在该目录下创建了本地库 这里可以设置用户签名 2)Eclipse ...

  10. MySql的replace into 语句

    MySQL REPLACE语句介绍 MySQL的REPLACE语句是一个MySQL扩展于SQL标准的语句. 官方定义:REPLACE works exactly like INSERT, except ...