【发布时间】:2011-10-08 00:11:28
【问题描述】:
有一个包含 12 个问题的测试。每个问题的值必须大于 4 分。所有问题必须加到 100。所有问题也必须有一个整数值。 所以可能的组合可能是 5,5,5,5,5,5,5,5,5,5,5,45
有一种方法理论上会给出这个结果:
// this method will return the possible number of tests
public static double PosibleNumberOfTests()
{
int q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12; // each question value
double counter=0; // if there is a valid combination then counter will be increased by 1
for (q12 = 5; q12 < 46; q12++)
{
for (q11 = 5; q11 < 46; q11++)
{
for (q10 = 5; q10 < 46; q10++)
{
for (q9 = 5; q9 < 46; q9++)
{
for (q8 = 5; q8 < 46; q8++)
{
for (q7 = 5; q7 < 46; q7++)
{
for (q6 = 5; q6 < 46; q6++)
{
for (q5 = 5; q5 < 46; q5++)
{
for (q4 = 5; q4 < 46; q4++)
{
for (q3 = 5; q3 < 46; q3++)
{
for (q2 = 5; q2 < 46; q2++)
{
for (q1 = 5; q1 < 46; q1++)
{
if (q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 + q11 + q12 == 100)
counter++; // here is what we need. How many times will this line be executed!
}
}
}
}
}
}
}
}
}
}
}
}
return counter;
}
请注意,我为小于 46 的值创建了每个循环,因为如果所有问题的值都必须大于 4,那么例如一个问题就不可能获得 50 分。
编辑
对不起,我认为我没有清楚地解释自己。我选择了 12 个问题作为随机猜测。这个例子可能是一个有 100 个问题的测试。我需要类似 dlev 在他的评论中提到的东西。我也知道我可以在循环中放置中断以使该方法更有效。如果总和大于 100 那么为什么继续循环只是从相应的循环中退出
【问题讨论】:
-
拜托,看在上帝的份上,不要运行该代码。
-
我知道,哈哈。所以我称之为理论方法
-
你的问题是:我如何计算出有多少个排列加起来等于 100?
-
我只想知道可能存在多少种不同的测试。请记住,每个问题必须至少值 5 分。所有问题必须加到 100。可能的组合是:5,5,5,5,5,5,5,5,5,5,5,45 或 5,5,5,5,5,5,5 ,5,5,5,6,44 或 5,5,5,5,10,10,10,10,10,10,10,10 等...
-
这是整数分区的一种变体。标准问题是“对于给定的 N,我有多少种方法可以形成一组整数,使得它们的总和为 N?”您的问题只是添加了“集合的大小必须为 12,并且任何元素都不能小于 5。”有关一些想法,请参阅此维基百科链接,尤其是“中间函数”部分:en.wikipedia.org/wiki/Partition_%28number_theory%29(注意:如果您也关心问题的 顺序,那么您正在谈论 compositions 而不是 partitions:en.wikipedia.org/wiki/Composition_%28number_theory%29)
标签: c# iteration probability