2011-11-22 26 views
1

我明天参加考试,考试时有一点关于概率。现在在许多这些任务中,一个是找到所有结果。有时候这很难做到。假设你有两个玩石头剪刀的玩家。一名球员是约翰,另一名是里斯。这两人连续打三场比赛。所有可能的结果与三轮可以表示为JTR。那将是约翰第一轮胜利,然后有一个领带,然后里斯赢得一轮。我知道有3 * 3 * 3 = 27个不同的结果。我可以在考试中使用我的电脑,并且可以使用一小段代码给出任何字母,在这种情况下,至少写出所有27个组合将非常好!我只会问,如果有一些已知的算法可以做到这一点,那么我现在就会在这一刻对自己进行攻击。任何建议将非常感谢!为数学考试做了少量的编程工作?

+3

我认为提前编写程序可能会让您对所得到的问题产生偏见。在这些类型的考试中,有时最好以明确的开放态度对待所有可能性。一旦你编写了一个程序,你就有了一个解决问题的方法。 –

+0

我提交了一个修改你的数学的编辑。在这种情况下,它应该是3!= 6,而不是3 * 3 * 3 = 27。 – jkschneider

+0

@jkschneider:如果John不能赢得连续两场比赛,那么情况就是这样 - 但他肯定可以? –

回答

1

请尝试以下功能:

void permute(String[] items, String[] soFar, int depth) { 
    if (depth == soFar.length) { 
     System.out.println(Arrays.toString(soFar)); 
     return; 
    } 
    for(String item: items) { 
     soFar[depth] = item; 
      permute(items,soFar,depth+1); 
    } 
} 

这样称呼它:

permute(new String[] {"J","T","R"},new String[3],0); 

第一个参数是要置换的项目组成的数组,第二个参数是一个空数组这只要你想要排列,第三个参数应该是0就可以了。

3

下面是这样一个程序的伪代码:

proc rps() 
    for outcome1 in {J,T,R} 
     for outcome2 in {J,T,R} 
      for outcome3 in {J,T,R} 
       print (outcome1, outcome2, outcome3) 

在实际编程语言,可以表示该集合{J,T,R}作为数字1,2,3(例如)。

当然,这个片段只有在你知道预先轮数的情况下才会起作用。对于可变数量的回合,您可以使用递归。