首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数学有关问题

2012-03-17 
数学问题请大家帮忙看一下 有3000多个数 浮点型的 数的大小是随机的 给出一个和数 将3000多个数分成若干组

数学问题
请大家帮忙看一下 有3000多个数 浮点型的 数的大小是随机的 给出一个和数 将3000多个数分成若干组 每组的和都等于这个和数 应该怎么算 可以剩余几个数

[解决办法]
假定求的是最大组数:
我是这么想的,先将3000个数字排序,假定和数为sum,组数为cnt,数字存在数组num[3000]中,
每组的数相加和等于sum,那么每组中元素个数可能为1,2,3,,,
(1)当一组只有一个元素时,这个元素怎么求呢,很简单,让3000个数依次和sum比较,若有相等,则cnt++,这个元素删掉
然后求一组两个元素
(2)当一组只有两个元素时,怎么求呢,
A+B=sum;
A从num[0]开始,B从num[2999]开始,
1, 若此时两数和<sum,A++,即A改为num[1];
2,若此时两数和>sum,B--,即B改为num[2998],
3,若两数和=sum,cnt++;两个元素删掉,A++,B—
表达能力有限,想象成链表,画画图估计能明白吧?
直到链表循环一遍 求一组有三个元素
(3) 当一组有三个元素时,
A+B+C=sum;
For(A=min;A<max;A++)//外部循环
当A取min时,即求B+C=sum-min 重复(2)即可//内部循环
然后A变换,依次重复(2),
(4)四个数时,我目前想到的还是重复(2)步骤
A+B+C+D=sum;
For(A+B=最小两数和;A+B<最大两数和;)//外部循环
当A+B=最小两数和,即求C+D=sum-最小两数和,重复(2)//内部循环
然后变换A+B值,重复(2)

那么,每组可能存在最大数目是多少,也就是何时知道剩余的数呢
当此时已求出每组n个元素的情况后,
在求每组n+1个元素时,若最小的n+1个元素和>sum 此时剩下的数便是剩余数




暂时就想到这些了。。
[解决办法]
既然这样,那就从每组多个元素开始计算,3000开始,
  
期待高手的回复。
[解决办法]
你这个,要是整数还好弄点,浮点数。。有点恶心
首先有个准确度问题,选好类型;
其次,可能有很多中情况,因为每组个数不一致,需要你来回地循环,以和出出发点,以此减去每个数,依次继续在剩下的数中寻找,最后得到一组,。。。
[解决办法]
这个题目是个NP完全的,没有好的算法可以解决,只能考虑近似算法了。

热点排行