我正在尝试输出左对齐的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;
}
最佳答案
帕斯卡的三角形公式:C(n,k),nCk = n!/(k!*(n-k)!)
试试这个代码:
#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;
。关于c - 使用C中的for循环输出帕斯卡三角形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28314637/