我从来没有太多的数学,我希望有人能帮助我解决以下问题。
我有5个盒子:
1 2 3 4 5
[ ] [ ] [ ] [ ] [ ]
这些方块可以是白色,灰色或黑色(或者将其视为0,1,2)
框中可以设置多少个可能的状态?
生成所有可能结果的伪代码(或任何语言)是什么?
...即
00000
00001
00011
00111
等等...
我真的很感激任何人都可以帮助我。
答案 0 :(得分:7)
组合数量的答案是:3x3x3x3x3(3 ^ 5)因为每个盒子可以有3种可能的颜色。
至于生成结果,看看是否可以使用此矩阵用0,1或2来表示结果,以表示框的颜色。在较小的范围内(假设有3个方框),它看起来像这样:
0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
0 2 0
0 2 1
0 2 2
1 0 0
1 0 1
1 0 2
1 1 0
1 1 1
1 1 2
1 2 0
1 2 1
1 2 2
2 0 0
2 0 1
2 0 2
2 1 0
2 1 1
2 1 2
2 2 0
2 2 1
2 2 2
答案 1 :(得分:6)
这是一个经典的排列生成问题。每个职位有3种可能性,5个职位。生成的字符串总数为3 ^ 5 = 243。 如果需要通用解决方案,则需要递归(简单的迭代循环仅适用于单个问题实例)。
这是一个简单的例子:
public static void Main(string[] args){
Generate("", 5);
}
private void Generate(string s, int limit)
{
if (s.Length == limit)
Console.WriteLine(s);
else
{
Generate(s+"0", limit);
Generate(s+"1", limit);
Generate(s+"2", limit);
}
}
答案 2 :(得分:5)
要回答你的第一个问题,如果方框只能包含两个值中的一个,答案是什么?那么,如果框中包含三个值中的一个,那么答案是什么?
要回答你的第二个问题,什么伪代码会产生一个盒子的所有可能结果?现在,伪代码会产生两个盒子的所有可能结果吗?
答案 3 :(得分:3)
我建议先在纸上解决问题。尝试使用较少数量的盒子(可能是三个)来解决它,并列出所有可能性。然后,想想你的推理是如何进行的,或者你如何解释你对一个小孩的所作所为。
答案 4 :(得分:1)
谢谢大家的回答,至少那些真正给我答案的人。
虽然我可以理解这个问题听起来像直接来自计算机科学101,但事实并非如此。具有讽刺意味的是,它是在真正的最后期限之前进行现实生活,当我被教导这些东西时,我没有时间回过头来对自己说,“我什么时候需要这个废话”
如果我想光顾和像学校男孩一样对待,我会回到小学,问我的五年级老师,我可以去洗手间
再次感谢
答案 5 :(得分:0)
可能性的数量是3到5的功率
如果从0循环到该数字减去1并在基数3中表达,您将拥有所有可能性(记得在必要时添加0)
在Ruby中:
number_of_possibilities = 3**5-1
for i in (0..number_of_possibilities)
base_3_number = i.to_s(3)
puts "%05d" % base_3_number # number formatting used to prepend 0s where necessary
end
答案 6 :(得分:0)
这似乎是一个家庭作业问题。那么我会给你一些关于解决方案的帮助。
你所说的是每个盒子有三个状态,都是独立的。一个盒子将有3个解决方案,两个盒子将有3 * 3个解决方案 - 对于第一个盒子的每个状态,第二个盒子也将具有三个状态。将其扩展到5个盒子。
要生成每个解决方案,您只需循环浏览即可。对于每个框,很容易嵌套for循环,乘以10的幂可以让你一次显示数字。
您可以以类似的方式概括多个框的代码。
答案 7 :(得分:0)
州的数量是3 ^ 5.
伪代码是
for value from 0 to 3^5-1
print base3(value)
其中base3是一个重复取模3得到一个数字的函数,然后删除该数字(除以3)
答案 8 :(得分:0)
提示:想象每个方框都是数字中的位置,每种颜色都是不同的数字。在现实世界中,你有2个位置和10个可能的数字,有多少组合(包括零)? 3个职位怎么样?给定您可用的位数,添加额外位置和组合数量之间的关系是什么?
答案 9 :(得分:0)
独特的组合数量:3^5=243
代码:
n = 0
for i = 0 to 3^5-1
{
s = ""
for j = 1 to 5
{
d = n mod 3
s = toascii(d) . s
n = n / 3
}
println s
i = i + 1
}
答案 10 :(得分:0)
以下是我第一次学习如何做到这一点:首先想想你正在做出多少选择。你正在做五个选择,每个盒子一个。所以用乘法符号写下五个空白行:
__ x __ x __ x __ x __ = ?
在每个空白处,写下您必须为该框选择的对象数量。由于每个方框有3个数字可供选择,因此在每个空白处写一个3:
3 x 3 x 3 x 3 x 3 = 243
这为您提供了这些选择的总排列数。
答案 11 :(得分:0)
我可以问一下你不明白或者是什么绊倒你?我看到这里的每个人都回答了这个问题,但是如果你复制了他们的答案,你什么都没学到,因此完全错过了作业的重点。假设你的下一课是建立在这一课程的基础之上,那么你将会进一步落后。
如果您要么为我工作,要么在我的课堂上,我只是问以下......
“你觉得这个问题怎么解决?”答案可能会揭示你被挂断的地方。 CMU的一位聪明的教授曾经说过“在你知道你不明白的事情之前我无法理解这一点”我从来没有弄清楚我不理解的东西而且我放弃了他的课,但课程坚持了下来我
我知道这可能为时已晚,但对于这些家庭作业问题,我认为我们应该帮助这个人学习,而不是简单地提供答案并为他们做功课。
答案 12 :(得分:0)
甚至不要尝试编写代码来回答这个问题!原因是你需要一些非常大的数字(阶乘)来计算它。这些创建的数字远大于CLR中的任何基本类型。您可以使用此opensource library进行计算。
答案 13 :(得分:0)
您的问题只需要组合词中的rule of product。
您可以通过3种方式选择 first 框的状态,以及3种方式选择 second 框的状态,以及...和状态5种方式有3种方式。您可以设置所有方框状态的方式的数量是所有五种(相等)方式的乘积,即3x3x3x3x3 = 3 5 。
类似的问题:你可以在十进制系统中用5位数形成多少个数字,计算前导零?也就是说,从00000到99999有多少个数字?你可以用10种方式选择第一个数字(0 ... 9),依此类推,依此类推,答案是10x10x10x10x10 = 100000,如你所知。
答案 14 :(得分:0)
void solve(int p=0,int n=5,int d=0)
{
if (n==p)
{
int rev=d;
int i=0;
while (i<5) {
cout << rev%10;
rev /= 10;
i++;## Heading ##
}
cout << endl;
return;
}
for(int i=0; i<3 ; i++)
{
solve(p+1,n, d*10 + i);
}
}