杨辉三角,该怎么处理
杨辉三角
#include "stdafx.h"
# include <stdio.h>
int main(void)
{
static int i, j,k, a[10][10];
a[0][0] =1 ;
for(k=0;k<10;k++)
{ for(i=k;i<=k;i++)
{ for(j=1;j<=k;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<10;i++)
{for(j=0;j<=i;j++)
{ printf("%-5d",a[i][j]);}
printf("\n");
}
}
运行结果
1
0 1
0 2 1
0 3 3 1
0 4 6 4 1
0 5 10 10 5 1
..........
为什么从第2行开始会出现0???
------解决方案--------------------
?我们当时做的时候就是要有0呀,把0进栈的呀
------解决方案--------------------
#include "stdafx.h"
# include <stdio.h>
int main(void)
{
static int i, j,k, a[10][10];
a[0][0] =1 ;
for(k=0;k<10;k++)
{ for(i=k;i<=k;i++)
{ for(j=1;j<=k;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<10;i++)
{for(j=0;j<=i;j++)
{ printf("%-5d",a[i][j]);}
printf("\n");
}
}
运行结果
1
0 1
0 2 1
0 3 3 1
0 4 6 4 1
0 5 10 10 5 1
..........
为什么从第2行开始会出现0???
------解决方案--------------------
?我们当时做的时候就是要有0呀,把0进栈的呀
------解决方案--------------------
- C/C++ code
#include <stdio.h> int main(void) { int i, j,k, a[10][10]; a[0][0]=1; for(k=1;k<10;k++) { a[k][0]=a[k-1][0]; for(i=1;i<k;i++) a[k][i]=a[k-1][i-1]+a[k-1][i]; a[k][k]=a[k-1][k-1]; } for(i=0;i<10;i++) { for(j=0;j<=i;j++) printf("%-5d",a[i][j]); printf("\n"); } system("pause"); }
------解决方案--------------------
你的我没看懂
这是百度的
- C/C++ code
#include<stdio.h> #define M 10 void main() { int a[M][M],i,j; for(i=0;i<M;i++) for(j=0;j<=i;j++) { if(i==j||j==0) a[i][j]=1; else a[i][j]=a[i-1][j]+a[i-1][j-1]; printf("%d ",a[i][j]); if(i==j) printf("\n"); } }
------解决方案--------------------
因为你的内层循环j是从1开始的啊,也就是从第2列开始的呀,第一列你没管
由于是你的数组是static int型,所有元素初始化为0
------解决方案--------------------
另一种版本:
- C/C++ code
#include <stdio.h> int factorial(int k) { int f = 1; if(k == 0) return 1; for(int i = 1; i <= k; ++i) { f *= i; } return f; } int combination(int n, int m) { return factorial(n) / (factorial(m) * factorial(n - m)); } int main(int argc, char* argv[]) { int row = 10; for(int i = 0; i < row; ++i) { for(int j = 0; j <= i; ++j) { printf("%d\t", combination(i, j)); } printf("\n"); } return 0; }