【问题标题】:A short bit of programming done for math exam?为数学考试做了一小段编程?
【发布时间】:2011-11-22 04:58:35
【问题描述】:

我明天要参加考试,那次考试涉及概率。现在,在其中许多任务中,一项任务是找出所有结果。有时很难做到这一点。假设您有两个玩石头剪刀布的玩家。一名球员是约翰,另一名是里斯。两人连续打了三场比赛。这组三轮的所有可能结果都可以表示为 JTR。那将是约翰赢得第一轮,然后是平局,然后里斯赢得一轮。我知道有 3*3*3=27 种不同的结果。我被允许在考试中使用我的计算机,并且可以给出任何字母的简短 sn-p 代码,在这种情况下,至少写出所有 27 个组合会非常好!我只问是否有一些已知的算法可以做到这一点,我现在会自己破解它。任何建议将不胜感激!

【问题讨论】:

  • 我认为提前编写程序可能会使您对遇到的问题产生偏见。在这些类型的考试中,有时最好以清晰开放的心态来参加考试,对所有可能性持开放态度。编写程序后,您就有了寻找问题的解决方案。
  • 我提交了一个编辑来纠正你的数学。在这种情况下,它应该是 3!=6,而不是 3*3*3=27。
  • @jkschneider:如果约翰不能连续赢两场比赛,情况就是这样——但他肯定能吗?
  • 也许我应该先阅读整个问题...

标签: java math permutation combinatorics


【解决方案1】:

这是这样一个过程的伪代码:

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(例如)。

当然,这个 sn-p 只有在你事先知道轮数的情况下才有效。对于可变轮数,您将使用递归。

【讨论】:

    【解决方案2】:

    试试下面的函数:

    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 来启动它。

    【讨论】:

      猜你喜欢
      • 2022-06-18
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2018-05-05
      相关资源
      最近更新 更多