zoukankan      html  css  js  c++  java
  • 杨辉三角

    分析: 其思路是用一维数组做,实际上用的是两个一维数组a[], b[].其中a[]是保存当前行各元素的值, 而b[]可以认为是一个临时数组, 它是a[]的一个备份, 也就是说在每行a[]元素置数完毕后,
    将a[]中的内容拷贝到b[]中,因为进行下一行的运算时, a[]会被重置, 而且由杨辉三角的规律知下一行要用到上一行的元素, 这样在计算下一行的a[]时就可以用保存在b[]中的上一行的元素了(咋感觉这么啰嗦呢^_^)。
    也正因为如此, 在每一行运算完之后,就要将其输出显示, 下一行时a[]就是新值了。所以用这种方法最后程序结束时并没有将三角中所有元素保存下来,只是在程序运行过程中将其输出。
    再看其程序的核心部分: a[j] = b[j] + b[j-1]; 其开始定义了数组a[80],b[80],0号元素并未使用,即每一行的元素都是从a[1]开始的。但这个0号元素是不是真的没用呢?稍加分析可知当然否,
    而且感觉这个0号元素用的挺巧妙,比如说到第5行时(其实与第几行没关系),输出第一个元素的语句是 a[1]=b[1]+b[0], 由于b[1]为1, 这时0号元素就派上用场了,b[0]为0,可以将每一行的第一个元素置为1, 往下走有第二个元素 a[2]=b[2]+b[1]; ...开始按杨辉三角的规律走。同理,到最后一个元素时,a[5]=b[5]+b[4],在上一行中只有4个元素,即此时b[]中只有4个有效元素,那这个b[5]算什么呢?
    其实它跟那个0号元素有相同的作用,因为初始化时数组中的所有元素都置为0,所以这时的b[5]为0,由b[4]为1可得a[5]为1。这样可以将每一行的最后一个元素置为1。对于各行,此法均适用,实际上就是在满足杨辉三角两侧值均为1的规律。

     1 #include <stdio.h>
     2 int main()
     3 {
     4     int a[10]={0};
     5     int b[10]={0};
     6     int i, j;
     7 
     8     b[1]=1;
     9     for(i=1;i<10;i++)
    10     {
    11         for(j=1;j<=i;j++)
    12         {
    13             a[j]=b[j-1]+b[j];
    14         }
    15         for(j=1;j<=i;j++)
    16         {   
    17             b[j]=a[j];
    18             printf("%d ", b[j]);
    19         }   
    20         printf("
    ");
    21     }   
    22         
    23     return 0;
    24 }
  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/chris-cp/p/3580833.html
Copyright © 2011-2022 走看看