【问题标题】:Pascal triangle using a function使用函数的帕斯卡三角形
【发布时间】:2015-10-24 08:55:51
【问题描述】:

我知道了如何构造帕斯卡三角形和代码 下面是完美的,但是......在这段代码中,我让 1 出现在 第一行通过创建一个新的 for 循环特别是它......有没有 在不使用独占 for 循环的情况下生成帕斯卡三角形的方法 让 1 首先出现...非常感谢您的帮助:)

//pascal triangle with ncr function
        #include <stdio.h>
        #include <conio.h>
        int ncr(int i,int j);
        int main()
        {
            int i,j,v,n,f,s;
            printf("Enter the number of rows required\n");
            scanf("%d",&n);
            f=n;
     //this is what i am exclusively using for printing 1 in 1st row
            for(;f>0;f--)
            {
                printf(" ");
            }
            printf("1\n");
     //is there a way to generate the above 1 using only the below for loop
            for(i=1;i<=n;i++)
            {
                for(s=n-i;s>0;s--)
                {
                    printf(" ");
                }
                for(j=0;j<=i;j++)
                {
                    v=ncr(i,j);
                    printf("%d ",v);
                }
                printf("\n");
            }
        }
        int ncr(int i,int j)
        {
            int k;
            float ans=1;
            for(;j>=1;j--)
                {
                    ans=((ans*i)/j);
                    i--;
                }
                k=ans;
                return(k);
        }

【问题讨论】:

  • 为什么您的ncr 实现看起来像 main 方法内?
  • 啊!我明白了......你说得对,我已经在 main 函数中实现了它......谢谢@Arc676
  • int ncr(int i,int j); {删除;
  • 你检查过...我知道如何完美地构建它,但我使用排他循环在第一行生成 1...有没有办法改变它

标签: c function loops logic pascals-triangle


【解决方案1】:

如果你仔细看,你会注意到ncr 函数是在main 方法内部定义的。将ncr 的实现移到main 之外。

另外,@BLUEPIXY 注意到,您对ncr 的实现有多余的;

int ncr(int i,int j); //<<right here
{
//...

EDIT第二个问题的解决方案(见Pascal's Triangle on Wikipedia

三角形的“第一”行实际上是第零行。您的外部循环以i = 1 开头,因此“第一”行包含1C01C1。 “第一”行或第零行实际上应该只包含0C0。新循环:

//notice how the i here has changed to 0
for(i=0;i<=n;i++)
{
    for(s=n-i;s>0;s--)
    {
        printf(" ");
    }
    for(j=0;j<=i;j++)
    {
        v=ncr(i,j);
        printf("%d ",v);
    }
    printf("\n");
}

【讨论】:

  • 和你之前说的一样,ncr函数应该在main函数之前定义吗?
  • 这是一种选择。但是,正如@Mukit Chowdhury 所注意到的,您已经在main 方法上方有一个原型,因此可以将其放在后面。 @Mukit 如果您看到错误,为什么不发布答案?
  • 我已经进行了更改...并没有显示错误,但是没有输出...是否有任何逻辑错误?
  • 实际上,只需复制您的代码(并删除 conio.h,因为我在 Mac 上)我得到无限的 1s 打印
  • 我找到了解决方案。此外,由于阶乘会很快变大,如果您需要支持较大的值,请使用 double,因为它可以容纳更大的数字。
猜你喜欢
  • 2021-12-28
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多