|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
要求:对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
以下是我的代码:
#include <stdio.h>
#include <stdlib.h>
int A(int a)
{
int s = 1;
while(a != 0)
{
s *= a;
a--;
}
return s;
}
int main()
{
int n,i,j;
while(scanf("%d",&n) == 1)
{
int a[n*(n+1)/2];
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
a[i*(i-1)/2+j-1] = A(i-1)/(A(j-1)*A(i-j));
}
}
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
printf("%d\t",a[i*(i-1)/2+j-1]);
if(j = i)
{
printf("\n\n");
}
}
}
}
return 0;
}
杨辉三角第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数,我觉得代码写的没错,可是运行输出全是1,求解为什么。
- #include <stdio.h>
- int yanghui(int n , int m)
- {
- int d , i , r = 0 , f1 , f2 ;
- if(m <= n) {
- for(f1 = 1 , d = n - 1 , i = m - 1 ; i ; i -- , d --) f1 *= d ;
- for(f2 = 1 , d = m - 1 ; d ; d --) f2 *= d ;
- r = f1 / f2 ;
- }
- return r ;
- }
- int main(void)
- {
- int i , j , n ;
- scanf("%d" , & n) ;
- for(i = 1 ; i <= n ; i ++) {
- printf("%3d" , yanghui(i , 1)) ;
- for(j = 2 ; j <= i ; j ++) printf(" %3d" , yanghui(i , j)) ;
- printf("\n") ;
- }
- }
复制代码
|
|