我们说我有12个值。对于这种情况,让每个值为一年中的一个月。现在每个月用自己独立的纸张写下来并放在桌子上。
因此,我们在一张桌子的表面上连续放了12张纸,每张纸上写着一年中的一个月。
每个月都会分配一定的百分比来选择。例如,1月= 15%,2月= 9%,12月= 5%等等。
现在,让我们随机选择1到100之间的数字。我们可以使用两个10面模具,使用计算机随机数生成器,或任何你想要的。
好的,让我们看一下那张" 1月"的那张纸。我们现在生成一个介于1和100之间的随机数,然后滚动到43个。好吧,我们现在进入二月,因为我们正在寻找一个或更低的15。看看2月份,我们会生成一个介于1到100之间的新随机数,然后滚动87.同样,我们正在寻找9或更低的选择2月,所以我们进入3月。等等......直到7月,我们得到的随机数为3!好的,7月被选中,我们停止整个过程。 7月是赢家。
我的问题是:每个月是否确实有被选中的百分比值?因为我们停止处理剩下的几个月,如果有人被选中,我想不会。如果我们每个月处理一次而不管被选中哪一个,那么是的,每个月都会有它的面值百分比值被选中的机会。
如果我们必须每月选择一次绝对停止(我们必须这样做),我怎样才能让每个月都有被选中的真实百分比?
我认为这个过程的一个步骤是确保每个月都有一个值,如果所有加在一起将等于100,我已经完成了。但这真的能确保一切吗?
Code wise(c ++),这里的内容如下:
// 15% January
// 9% February
// 9% March
// 8% April
// 8% May
// 8% June
// 8% July
// 8% August
// 8% September
// 8% October
// 6% November
// 5% December
int month = 0;
bool monthFound = false;
if (!monthFound && random(1, 100) <= 15)
{
monthFound = true;
month = 1;
}
if (!monthFound && random(1, 100) <= 9)
{
monthFound = true;
month = 2;
}
if (!monthFound && random(1, 100) <= 9)
{
monthFound = true;
month = 3;
}
if (!monthFound && random(1, 100) <= 8)
{
monthFound = true;
month = 4;
}
if (!monthFound && random(1, 100) <= 8)
{
monthFound = true;
month = 5;
}
if (!monthFound && random(1, 100) <= 8)
{
monthFound = true;
month = 6;
}
if (!monthFound && random(1, 100) <= 8)
{
monthFound = true;
month = 7;
}
if (!monthFound && random(1, 100) <= 8)
{
monthFound = true;
month = 8;
}
if (!monthFound && random(1, 100) <= 8)
{
monthFound = true;
month = 9;
}
if (!monthFound && random(1, 100) <= 8)
{
monthFound = true;
month = 10;
}
if (!monthFound && random(1, 100) <= 6)
{
monthFound = true;
month = 11;
}
if (!monthFound && random(1, 100) <= 5)
{
monthFound = true;
month = 12;
}
if (month)
printf("The month that was picked is: %d", month);
else
printf("No month was picked.");
这是另一种方式:
int monthNum = 0;
std::vector<int> chance_;
std::vector<int> month_;
month_.push_back(1); chance_.push_back(15);
month_.push_back(2); chance_.push_back(9);
month_.push_back(3); chance_.push_back(9);
month_.push_back(4); chance_.push_back(8);
month_.push_back(5); chance_.push_back(8);
month_.push_back(6); chance_.push_back(8);
month_.push_back(7); chance_.push_back(8);
month_.push_back(8); chance_.push_back(8);
month_.push_back(9); chance_.push_back(8);
month_.push_back(10); chance_.push_back(8);
month_.push_back(11); chance_.push_back(6);
month_.push_back(12); chance_.push_back(5);
for (std::vector<std::string>::size_type z = 0; z < month_.size(); z++)
{
// Check the chance of the month being picked.
if (RANDOM(1, 100) <= chance_[z])
{
monthNum = month_[z];
break;
}
}
if (monthNum)
printf("The month that was picked is: %d", monthNum);
else
printf("No month was picked.");
答案 0 :(得分:0)
你没有标记C++
,我使用python,所以这是Kris的建议:python:
import random
number = random.randint(1,100)
if number >= 95:
print ('December')
elif number >= 89:
print ('November')
elif number >= 81:
print ('October')
elif number >= 73:
print ('September')
elif number >= 65:
print ('August')
elif number >= 57:
print ('July')
elif number >= 49:
print ('June')
elif number >= 41:
print ('May')
elif number >= 33:
print ('April')
elif number >= 27:
print ('March')
elif number >= 16:
print ('Febuary')
elif number >= 1:
print ('January')