CodeSky 代码之空

随手记录自己的学习过程

C 一道杨辉三角题

2014-03-14 14:28分类: C评论: 0

题干: 输入一个数,输出对应层数的杨辉三角。

什么是杨辉三角:http://zh.wikipedia.org/wiki/杨辉三角形

作为一个逗逼……不小心让上次的斐波那契数列题的formerlater走错片场于是……不用在意这些细节。

我的可悲的写法QvQ

1#include <stdio.h>
2
3int Yang(int num);
4
5int main(void)
6{
7    int num;
8
9    printf("请输入你要的层数: ");
10    scanf("%d", &num);
11    Yang(num);
12
13    return 0;
14}
15
16int Yang(int num)
17{
18    int i, j, k, array[num], result[num], former, later;
19
20    for (i = 1; i <= num; i++) {
21        array[0] = 1;
22        array[i - 1] = 1;
23        result[0] = 1;
24        result[i - 1] = 1;
25        for (j = 1; j < i - 1; j++) {
26            former = array[j - 1];
27            later = array[j];
28            result[j] = former + later;
29        }
30        for (k = 0; k < i; k++)
31            array[k] = result[k];
32    }
33
34    for (i = 0; i < num; i++)
35        printf("%-3d", result[i]);
36
37    return 0;
38}
39

不擅长用递归,于是就直接算吧……数组部分还没怎么学就这么混混咯,部分参考了一下上次的C 斐波那契数列题目两则,其实是两个数组传值运算。


相比之下师匠的方法显得高明得多,具体效率其实并不清楚谁快谁慢,递归嘛,本身效率就不高,不过代码简单。

1#include <stdio.h>
2
3int Yang(int row, int col)
4{
5    int len = row;
6    if (row == 1 || col == 1 || col == len)
7        return 1;
8    if (col > len)
9        return 0;
10    return Yang(row - 1, col - 1) + Yang(row - 1, col);
11}
12
13int main(void)
14{
15    int row, i;
16
17    scanf("%d", &row);
18
19    for (i = 1; i <= row; ++i)
20        printf("%d ", Yang(row, i));
21    printf("\n");
22
23    return 0;
24}
25

因为函数在main上面,所以声明和内容合并了 放在下面按照规定就得声明了QvQ好烦啦

递归的思路,关于递归,另开文章说。

评论 (0)