Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2423|回复: 4

抽取不同颜色球的问题

[复制链接]
发表于 2017-6-1 23:23 | 显示全部楼层 |阅读模式
一个袋子里边有40个球,各种颜色的都有,要抽取20个球,需要尽量平均到各种球,同时还要顾及权重。这个代码咋写?琢磨了半天也没写出来。
我的思路是用各种颜色的球的数量除以总数作为权重,然后用20乘以权重再四舍五入, 结果最终出来了一个总数22。
当球的总数变化,各种颜色的球的数量变化,抽取的总数变化的时候,有些时候有的球根本就不会被抽到。
求大神给个代码。{:021:}

加权均分.zip

11.41 KB, 下载次数: 9

安全

发表于 2017-6-2 12:41 | 显示全部楼层
思路不清晰,比如你有6种球,抽取5个,你打算放弃哪种?判断依据是什么?
根据你的要求(虽然并不是很明确),我的思路:
1、抽取数少于种类数的话,随机抽取;
2、抽取数多于种类数的话,各取1个,不足的部分,再次抽取1个,依据是根据球数量最多的种类开始抽,
   再有不足的部分,再次抽取,直到抽取到所需的数为止。
3、如果各种球的数量有相同时,按数量多少顺序抽取就不适用了,相同数量的球种类内再随机抽取。
回复

使用道具 举报

发表于 2017-6-2 14:17 | 显示全部楼层
40个球建立一个数组 白球,黑球,黑球,黑球,黑球,红球,红球,红球,红球,红球,红球。。。。然后随机抽就是了,肯定平均。
回复

使用道具 举报

发表于 2017-6-2 14:23 | 显示全部楼层
楼主的意思是对所有种类的球都按同样的比例抽取(当然需要4舍5入),总和等于设定数。
比如40个球内抽取20个,那要求每种球都按50%的比例抽取。
回复

使用道具 举报

发表于 2017-6-2 14:28 | 显示全部楼层
  1. Sub 加权平均()
  2.     arr = [a2:b7]
  3.     Dim xrr(1 To 1000)
  4.     For i = 1 To UBound(arr)   '把所有的球放入数组xrr
  5.         x = arr(i, 1)
  6.         For k = 1 To arr(i, 2)   'arr(i,2)是该种颜色球的个数
  7.             n = n + 1
  8.             xrr(n) = x
  9.         Next
  10.     Next
  11.    
  12.     Set d = CreateObject("scripting.dictionary")
  13.     For i = 1 To 20       '随机抽取20个
  14.         p = Int(Rnd * n + 1)
  15.         d(xrr(p)) = d(xrr(p)) + 1
  16.         xrr(p) = xrr(n)
  17.         n = n - 1
  18.     Next
  19.    
  20.     [a13:b100].Clear     '显示结果
  21.     [a13].Resize(d.Count, 2) = Application.Transpose(Array(d.keys, d.items))
  22. End Sub
复制代码

加权均分.rar

13.55 KB, 下载次数: 5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 02:19 , Processed in 0.268800 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表