当前位置: 代码迷 >> C语言 >> 无语了..怎么全是1//
  详细解决方案

无语了..怎么全是1//

热度:152   发布时间:2008-05-02 21:13:46.0
无语了..怎么全是1//
VC6.0编译:
程序代码:

#include<stdio.h>
#include<stdlib.h>
int Binomial(int n,int k)
{
     int i,j;
     int **C=(int**)malloc(sizeof(int*)*(n+1));
     for(i=0;i<n+1;++i)  C[i]=(int*)malloc(sizeof(int)*(k+1));
     for(i=0;i<=n;++i)
       for(j=0;j<=(k>i?i:k);++j)
          if(j==0||j==k) C[i][j]=1;
          else  C[i][j]=C[i-1][j]+C[i-1][j-1];
    int ret = C[n][k];
    for(i=0;i<n+1;++i) free(C[i]);  free(C);
   return ret;
}
int main(void)
{
      int n,k;
      while(scanf("%d,%d",&n,&k)!=EOF)
        printf("%d\n",Binomial(n,k));
    return 0;
}

----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
int Binomial(int n,int k)
{
    int i,j;
    int **C=(int**)malloc(sizeof(int*)*(n+1));
    for (i=0;i<n+1;++i)  C[i]=(int*)malloc(sizeof(int)*(k+1));
    for (i=0;i<=n;++i)
        for (j=0;j<=(k>i?i:k);++j)
            if (j==0||j==k) C[i][j]=1;
            else  C[i][j]=C[i-1][j]+C[i-1][j-1];
    int ret = C[n][k];
    for (i=0;i<n+1;++i) free(C[i]);  free(C);
    return ret;
}
int main(void)
{
    int n,k;
    while (scanf("%d,%d",&n,&k)!=EOF)
        printf("%d\n",Binomial(n,k));
    return 0;
}


请问这个代码什么作用

[color=white]

[[it] 本帖最后由 雨中秣燕 于 2008-5-2 21:22 编辑 [/it]]
----------------解决方案--------------------------------------------------------
书上DP这章的第一个代码////
----------------解决方案--------------------------------------------------------
为什么我看的明白 就是不想去想 着程序有什么用
----------------解决方案--------------------------------------------------------
我是问你的个代码对应的什么题目

[color=white]
----------------解决方案--------------------------------------------------------
就是Dp来求二项式系数C(n,k)...
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
int Binomial(int n,int k)
{
     int i,j;
     int **C=(int**)malloc(sizeof(int*)*(n+1));
     for(i=0;i<n+1;++i)  C[i]=(int*)malloc(sizeof(int)*(k+1));
     for(i=0;i<=n;++i)
       for(j=0;j<=(k>i?i:k);++j)
       {
          if(j==0||j==k)
              C[i][j]=1;//被这里限制住了
          else  
              C[i][j]=C[i][j-1]+C[i-1][j-1];
            printf("%d ",C[i][j]);
          if(j==(k>i?i:k))
              printf("\n");
       }
    int ret = C[n][k];
    for(i=0;i<n+1;++i) free(C[i]);  free(C);
   return ret;
}
int main(void)
{
      int n,k;
      while(scanf("%d,%d",&n,&k)!=EOF)
        printf("%d\n",Binomial(n,k));
    return 0;
}
----------------解决方案--------------------------------------------------------
我真无语了,纯属书上印刷出错,应该j==i的变成j==k~
----------------解决方案--------------------------------------------------------
别直接照搬书的代码。。。。。。。。
最好理解后,自己独立写出。。。。。

[color=white]
----------------解决方案--------------------------------------------------------
饿。。。。谢谢燕子的建议///
今天看DP,手上两本书的描述不一样,本来是想对比起学, 弄到后面越看越没信心了............
----------------解决方案--------------------------------------------------------
  相关解决方案