大学里学的东西都忘了,求一个算法(200分)

  • 主题发起人 主题发起人 wangzhi1
  • 开始时间 开始时间
W

wangzhi1

Unregistered / Unconfirmed
GUEST, unregistred user!
求一个算法:
条件:已知最大值,最小值,平均值,点数
求解:除了最大值,最小值外其他点的值

比如:
条件:已知最大值为5,最小值为2,平均值为 3,点数为3
解法1:除了最大值,最小值外其他点的值为2
 
这样吧:
如果剩余点数为1
则该值=平均值*点数-其他所有点值
如果该值在最大最小范围之外,无解

如果剩余大于1
该点值= 在最大值/最小值之间取随机值
如果 (平均值*点数-其他所有点值-该点值)/剩余点数 在最大/最小范围外
重取该点值

循环取各值
 
比如:
条件:已知最大值为5,最小值为2,平均值为 3,点数为3
解法1:除了最大值,最小值外其他点的值为2
总值 点数为3*平均值为 3-(最大值为5+最小值为2)=2 求一个算法:
条件:已知最大值,最小值,平均值,点数
求解:除了最大值,最小值外其他点的值
总值:=(点数*平均值 -(最大值为5+最小值为2))/(点数-2)=
 
其它点的值=(平均值×点数-最大值-最小值)÷(点数-2)
其它点的值如果不平均计算,就有多解。
 
if 平均值*点 > Max+Min
then Values = (平均*点 - Max - Min) / (点-2) ; //无穷多解之一
else if 平均值*点 = Max+Min
then Values = 0 //包括只有Max&Min二点
else 无解
 
解太多啦
例如100个数,最大1000,最小20,平均 87,
怎样求其他98个数?
只要98个数的和=98*平均值就是一组解
既(x1+x2+...+x97)=98*87;
所以。我想是没什么好算法的
 
lanyun2:
我想要的是其中一个解,最好是每次的解不同,
如果能穷举解也可以阿!
 
现在还没有找到解决方法!
顶一个!
 
例如
例如6个数,最大300,最小20,平均 247,
区间差(300-20)/5=56
可求出各均匀基点的值:20 20+56 20+56*2 20+56*3 20+56*4 300
76 132 188 244
基点生成后总值为20+76+132+188+244+300=960
目标总值为247×6=1482

需加总值为1482-960=522

从值大的基点开始加,加到顶第一次:20 76 132 188 244+(56-1) 300
299

需加总值为522-(56-1)=467,
这时第二大基点,与第一大基点的区间值已经不是56了,是111了
第二次:20 76 132 188+110 299 300
298

需加总值为467-110=357
同理
第二大基点与第三大基点区间值 166
第三次:20 76 132+165 298 299 300
297

需加总值为357-165=192
第三大基点与第四大基点区间值223>192
第四次:20 76+192 297 298 299 300
268

结果: 20 268 297 298 299 300
 
还是结帖吧!
谢谢你们的参与!!
 
后退
顶部