c - 帮助 帕斯卡三角

标签 c loops nested-loops

下面的代码片段打印了帕斯卡三角形,我从互联网上得到了这个片段,但我无法获得 bin 的公式。如果有人可以帮助我,我将不胜感激\

#include<stdio.h>
int main()
{
    int bin=1,p,q=0,r,x;
    clrscr();
    printf("Rows you want to input:");
    scanf("%d",&r);
    printf("\nPascal's Triangle:\n");
    while(q<r)
    {   
        printf("ROW %d",q);
        for(p=40-3*q;p>0;--p)
        printf(" ");
        for(x=0;x<=q;++x)
        {
            if((x==0)||(q==0))
            bin=1;
            else
            bin=(bin*(q-x+1))/x;
            printf("%6d",bin);
        }
        printf("\n");
        ++q;
    }
    getchar();
    return 0;
}

最佳答案

好的,我们来看看。 实际的公式是内部 for 循环:

    for(x=0;x<=q;++x)
    {
        if((x==0)||(q==0))
          bin=1;
        else
          bin=(bin*(q-x+1))/x;
        printf("%6d",bin);
    }

q 代表帕斯卡三角形的行,从顶部开始。 x 表示行中的元素编号。由于在第 1 行中将有 1 个元素,在第 2 行中将有两个元素。 所以for(x=0;x<=q;++x)有道理。

现在到 if 子句 if((x==0)||(q==0)) 。如果 x 为 0,则我们位于三角形的左侧或三角形行的开头,该行始终为 1。如果 q 为 0,则显然这是三角形的第一行(从顶部开始),也始终为 1 1. 由于只有一个元素。

现在到 else 子句,这可能是最有趣的部分:

    else
      bin=(bin*(q-x+1))/x;

我们第一次进入这个子句是在循环开始时 q 为 0 并且 x 为 0 并设置为 1 之后。这很重要,因为 bin 是在 for 循环之外定义的,并且将值保留在迭代到迭代。所以现在 x 是 2,bin 是 1。同样,q 代表行号和行的长度。要了解这一点,您应该查看 pascal's triangle 的维基百科页面。 。特别是带有

的部分

Calculating an individual row or diagonal by itself

在那里你会发现再次写下的公式。这里重要的词是阶乘。另请参阅有关 pascal matrix 的文章可能会有帮助。 我会尝试解释它,但是(我讨厌有人这么说)你必须看到它。看一下帕斯卡三角形的对角线和公式的内部 (q-x+1) 。现在计算每条对角线总会得到的值。你看到一个模式了吗?我希望现在事情开始变得有意义。

关于c - 帮助 帕斯卡三角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4058416/

相关文章:

c - 从 C 中的套接字读取给出奇怪的输出

r - 仅在 R 中的 ANOVA 循环上打印显着结果

c - freopen 用于在定向到文件后将输出重定向回标准输出

java - 需要验证循环,二进制到十进制未输出正确的答案

javascript - 循环中的 Push 方法导致数组位于数组内部

python - 如何在 networkx 中高效地生成多个具有随机边权重的随机图

python :Nested for loops fail on the second loop

nested-loops - 马塔 : Create a matrix that contains averages of all elements of 3 matrices

C 通过函数对 char 进行 malloc/free 双指针

c++ - 按下按钮时增加枚举值