0

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

//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);
        }
4

1 回答 1

1

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

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

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

编辑第二个问题的解决方案(参见维基百科上的帕斯卡三角

三角形的“第一”行实际上是第 0 行。您的外部循环以开头,i = 1因此“第一”行包含1C0and 1C1。“第一”行或第零行实际上应该只包含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");
}
于 2015-10-24T09:08:04.563 回答