我正在尝试输出左对齐的Pascal三角形。程序应首先通过提示“N:”从用户读取一个正整数N.然后,程序将在屏幕上打印Pascal三角形的前N行。但是,我认为我的外部两个for循环存在问题。而不是得到(N = 3)
1
1,1
1,2,1
我到了
1
1,2
2,4,4-
#include <stdio.h>
int main(void) {
int input,i,j,k,p,N,x;
int f1=1;
int f2=1;
int f3 = 1;
printf("N:");
scanf("%d",&N);
for(i=1;i<=N;i++){
for(j=1;j<=i;j++){
for(x = 1; x<= N-1; x++){
f1 = f1 * x;
}
for(x = 1; x <= j-1; x++){
f2 = f2 * x;
}
for(x = 1; x <= N-j; x++){
f3 = f3 * x;
}
p= (f1)/(f2*f3);
if(j==i)
printf("%d",p);
else
printf("%d,",p);
}
printf("\n");
}
return 0;
}
答案 0 :(得分:1)
Pascal的三角公式: C(n,k), n C k = n!/(k!*(nk)! )
试试这段代码:
#include <stdio.h>
int main(void) {
int i,j,p,N,x;
int f1=1;
int f2=1;
int f3 = 1;
printf("N:");
scanf("%d",&N);
for(i=0;i<=N;i++){
for(j=0;j<=i;j++){
f1=f2=f3=1; //after each calculation change value to default otherwise it will take old value.
for(x = 1; x<= i; x++){ // run upto x<=i
f1 = f1 * x;
}
for(x = 1; x <= j; x++){ //run upto x<=j
f2 = f2 * x;
}
for(x = 1; x <= i-j; x++){ //run upto x<=i-j
f3 = f3 * x;
}
p= (f1)/(f2*f3);
if(j==i)
printf("%d",p);
else
printf("%d,",p);
}
printf("\n");
}
return 0;
}
在计算一个值后,您没有将其更改为默认值,因此使用旧值进行下一次计算并输出错误。
因此,请在每次计算后使用f1=f2=f3=1;
。
答案 1 :(得分:0)
您需要在每次迭代时将f1
,f2
和f3
设置为1,而不仅仅是第一次迭代。您还需要调整循环边界。
#include <stdio.h>
int main(void)
{
int N;
printf("N: ");
scanf("%d", &N);
printf("Pascal triangle for N = %d\n", N);
for (int i = 0; i <= N; i++)
{
for (int j = 0; j <= i; j++)
{
int f1 = 1;
int f2 = 1;
int f3 = 1;
for (int x = 1; x<= i; x++)
f1 *= x;
for (int x = 1; x <= j; x++)
f2 *= x;
for (int x = 1; x <= i-j; x++)
f3 *= x;
int p = (f1)/(f2*f3);
if (j == i)
printf("%d", p);
else
printf("%d,", p);
}
printf("\n");
}
return 0;
}
示例输出:
$ ./pascal
N: 7
Pascal triangle for N = 7
1
1,1
1,2,1
1,3,3,1
1,4,6,4,1
1,5,10,10,5,1
1,6,15,20,15,6,1
1,7,21,35,35,21,7,1
$