每年的行动次数。组合问题

时间:2018-11-16 13:55:04

标签: math combinations

我正在写有关疫苗的文凭。有一个地区,它的人口和12个月。有一个从0到1的12个值的数组,步长为0.01。这意味着我们每个月应该为那部分人口接种疫苗。 例如,如果我们有数组= [0.1,0,0,0,0,0,0,0,0,0,0,0,0]。这意味着我们仅应在第一个月为区域人口接种0.1。 另一个数组= [0,0.23,0,0,0,0,0,0,0.02,0,0,0]。这意味着我们应该在第二个月接种0.23的地区人口,在第9个月接种0.02的地区人口。 因此,问题是:如何生成(使用3个循环)12(月)* 12(疫苗接种次数)* 100(从0到1的步数)= 14_400包含这些组合的每个版本的数组数。

现在我有以下代码:

for(int month = 0;month<12;month++){
   for (double step = 0;step<=1;step+=0.01){
      double[] arr = new double[12];
      arr[month] = step;
   }
}

我需要添加3d循环,该循环将每年不同的疫苗接种次数。 不知道怎么写。

Idk(如果可以理解)。 希望你能得到它,否则请问我。

1 个答案:

答案 0 :(得分:0)

第一个月0.00, 0.01..1.00您有101个变体
第二个月的101个变体-相同的值。 还有101 * 101个可能的组合,为期两个月。

继续-在所有12个月内,您有101^12 variants ~ 10^24
不可能生成和存储如此多的组合(至少在当前十年中如此)

如果步长大于0.01,则组合计数可能是可靠的。通用公式为P=N^M,其中N是每月的变体数量,M是月数

在N-ric数字系统中,您可以遍历表示范围0..P-1中所有整数的所有组合。或制作数字计数器:

 fill array D[12] with zeros
 repeat
    increment element at the last index by step value
    if it reaches the limit, make it zero 
                    and increment element at the next index
 until the first element reaches the limit 

这类似于计算08、09,这里我们不能加9,所以加10,依此类推

s = 1
m = 3
mx = 3
l = [0]*m
i = 0
while i < m:
    print([x/3 for x in l])
    i = 0
    l[i] += s
    while (i < m) and l[i] > mx:
        l[i] = 0
        i += 1
        if i < m:
            l[i] += s

Python代码打印出(mx/s+1)^m=4^3之类的64([0.3333, 0.6666, 0.0])个变体