C 一道杨辉三角题

题干:

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

什么是杨辉三角:http://zh.wikipedia.org/wiki/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92%E5%BD%A2

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

我的可悲的写法QvQ

#include <stdio.h>

int Yang(int num);

int main(void)
{
    int num;

    printf("请输入你要的层数: ");
    scanf("%d", &num);
    Yang(num);

    return 0;
}

int Yang(int num)
{
    int i, j, k, array[num], result[num], former, later;

    for (i = 1; i <= num; i++) {
        array[0] = 1;
        array[i - 1] = 1;
        result[0] = 1;
        result[i - 1] = 1;
        for (j = 1; j < i - 1; j++) {
            former = array[j - 1];
            later = array[j];
            result[j] = former + later;
        }
        for (k = 0; k < i; k++)
            array[k] = result[k];
    }

    for (i = 0; i < num; i++)
        printf("%-3d", result[i]);

    return 0;
}

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


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

#include <stdio.h>

int Yang(int row, int col)
{
    int len = row;
    if (row == 1 || col == 1 || col == len)
        return 1;
    if (col > len)
        return 0;
    return Yang(row - 1, col - 1) + Yang(row - 1, col);
}

int main(void)
{
    int row, i;

    scanf("%d", &row);

    for (i = 1; i <= row; ++i)
        printf("%d ", Yang(row, i));
    printf("\n");

    return 0;
}

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

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

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 源码, 代码段, 题目

添加新评论