回 帖 发 新 帖 刷新版面

主题:这个软件谁会做??---紧急求助!

各位计算机高手老师:
   我是一个63岁的老同志,现在急需要一个有关数字求和的软件,希望有哪位老师能帮我解决!
   有1--40共40个数字,从中任意选取X个(如5个或6个等)数字进行相加求得一个和值。当然,这个和值应该有很多很多个。听他们讲,用什么“排列”法,有上千万个这样的和值。我的求助点是:我随便找个和值(如:148),通过老师解决的软件,我能找到都是由那些数字相加得到的这个和值。当然,这样的数字应该有很多组。


简单的讲就是:从40个数字中,我想从中任意找出X个数字,使其相加的和值是“Y”;那么,和值是“Y”的X个数字都是谁?一共有多少组和值等于“Y”的X个数字呢??


请各位老师帮帮我呀!!!   一定帮帮我呀!!!

回复列表 (共3个回复)

沙发

这个很容易实现啊,我可以给你做个小程序发给你
你的联系方式呢?

板凳

找一组很容易,所有组列出不太可能
y=515 x=20 它可能有上亿组,光输出就要几天时间

3 楼

软件开发平台TC2.0
#define MAX 10 /*x最大值是多少*/
#define NUM 40 /*数据个数是多少*/
void f(double num[NUM], int x, double y){
    double v; int i, j, k, xb[MAX];
    for(i=0; i<NUM-x; i++){ /*第一个加数的可能位置*/
       k=0; xb[k++]=i;      /*保存第一个加数的位置*/
       while(1){            
         for(; k<x; k++)    /*按序生成第一个可能组合*/
           xb[k+1] = xb[k];
         v = 0.0;
         for(j=0;j<x;j++)   /*把当前组合求累加和*/
           v += num[xb[j]];
         if(y==v){          /*和正确则输出*/
           for(j=0;j<x-1;j++) printf("%lf+", num[xb[j]]);
           printf(("%lf=%lf", num[xb[j]], y);
         }
         k--;               /*把数据向后移动,若移到最后,则移到前一个位置的数据*/
         while(k>0 && xb[k++]++ > NUM+k-x) k-=2;
         if(k<=0) break;    /*若位置移到第一个,退出,移到第一个数据*/
       }
     }                      /*一直做到第一个数据移到到最后*/
}

/*未优化,未调试,请有环境的朋友帮他优化调试一下*/

我来回复

您尚未登录,请登录后再回复。点此登录或注册