Chinaunix

标题: 求某个组合的和最接近某个值 [打印本页]

作者: zhengwei_zw    时间: 2022-03-17 11:09
标题: 求某个组合的和最接近某个值
本帖最后由 zhengwei_zw 于 2022-03-17 11:18 编辑

8,600.00
94.05
72.00
166.05
8,600.00
494.31
101.67
72.00
8,600.00
267.36
4,022.58
4,300.00
177.53
737.00
508.33
72.00
36.00
7.20
3,966.09
10,246.02
986.72
8,600.00
2,772.45
1,490.02
477.38
340.80
101.67
72.00
3,088.60
10.17
7.20
142.00
205.00
60.20
150.00
10.80
391.53
4,300.00

377.27

39个数字
需要组合测试,接近17095.00的组合排序




作者: zhengwei_zw    时间: 2022-03-17 11:17
比如a+b+c=17094.9  a+b+d=17093  a+c+e=17095.1 c+e+f=17094.87
然后把上面的组合和值打印出来
作者: wh7211    时间: 2022-03-18 12:50
回复 2# zhengwei_zw


  1. cat 1
  2. 8600.00
  3. 94.05
  4. 72.00
  5. 166.05
  6. 8600.00
  7. 494.31
  8. 101.67
  9. 72.00
  10. 8600.00
  11. 267.36
  12. 4022.58
  13. 4300.00
  14. 177.53
  15. 737.00
  16. 508.33
  17. 72.00
  18. 36.00
  19. 7.20
  20. 3966.09
  21. 10246.02
  22. 986.72
  23. 8600.00
  24. 2772.45
  25. 1490.02
  26. 477.38
  27. 340.80
  28. 101.67
  29. 72.00
  30. 3088.60
  31. 10.17
  32. 7.20
  33. 142.00
  34. 205.00
  35. 60.20
  36. 150.00
  37. 10.80
  38. 391.53
  39. 4300.00
  40. 377.27

  41. awk '{a[NR]=$1}END{for(i=1;i<=NR;i++){for(j=i+1;j<=NR;j++){for(k=j+1;k<=NR;k++){b=a[i]+a[j]+a[k];c=17095;d=b>=c?b-c:c-b;e[a[i]"+"a[j]"+"a[k]"="b]=d}}};PROCINFO["sorted_in"]="@val_num_asc";for(i in e){if(e[i]<=200){print i" -> "e[i]}}}' 1
  42. 4022.58+10246.02+2772.45=17041 -> 53.95
  43. 4300.00+8600.00+4300.00=17200 -> 105
  44. 8600.00+4300.00+4300.00=17200 -> 105
  45. 3966.09+10246.02+2772.45=16984.6 -> 110.44
  46. 8600.00+7.20+8600.00=17207.2 -> 112.2
  47. 8600.00+8600.00+7.20=17207.2 -> 112.2
  48. 8600.00+8600.00+10.17=17210.2 -> 115.17
  49. 8600.00+8600.00+10.80=17210.8 -> 115.8
  50. 8600.00+36.00+8600.00=17236 -> 141
  51. 8600.00+8600.00+36.00=17236 -> 141
  52. 8600.00+8600.00+60.20=17260.2 -> 165.2
  53. 8600.00+4022.58+4300.00=16922.6 -> 172.42
  54. 4022.58+8600.00+4300.00=16922.6 -> 172.42
  55. 4022.58+4300.00+8600.00=16922.6 -> 172.42
  56. 8600.00+8600.00+72.00=17272 -> 177
  57. 72.00+8600.00+8600.00=17272 -> 177
  58. 8600.00+72.00+8600.00=17272 -> 177
  59. 8600.00+94.05+8600.00=17294 -> 199.05
  60. 94.05+8600.00+8600.00=17294 -> 199.05
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2