Java 为数学考试做一点编程?

Java 为数学考试做一点编程?,java,math,permutation,combinatorics,Java,Math,Permutation,Combinatorics,我明天要参加考试,考试中有一点关于概率。现在,在许多这些任务中,一个是找到所有的结果。这有时很难做到正确。假设有两个玩家在玩石头剪刀。一个是约翰,另一个是里斯。两人连续打了三场比赛。这一系列三轮的所有可能结果都可以表示为JTR。那就是约翰赢了第一轮,然后是平局,然后里斯赢了一轮。我知道有3*3*3=27种不同的结果。我被允许在考试中使用我的电脑,一个简短的代码片段可以给出任何字母,在这种情况下,至少写出所有27个组合会非常好!我只是想问一下,如果有什么已知的算法可以做到这一点,我会在此刻亲自动手

我明天要参加考试,考试中有一点关于概率。现在,在许多这些任务中,一个是找到所有的结果。这有时很难做到正确。假设有两个玩家在玩石头剪刀。一个是约翰,另一个是里斯。两人连续打了三场比赛。这一系列三轮的所有可能结果都可以表示为JTR。那就是约翰赢了第一轮,然后是平局,然后里斯赢了一轮。我知道有3*3*3=27种不同的结果。我被允许在考试中使用我的电脑,一个简短的代码片段可以给出任何字母,在这种情况下,至少写出所有27个组合会非常好!我只是想问一下,如果有什么已知的算法可以做到这一点,我会在此刻亲自动手。任何建议都将不胜感激

以下是此类过程的伪代码:

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


当然,只有在您知道之前的轮数时,此代码段才会起作用。对于可变的轮数,您可以使用递归。

以下是此类过程的伪代码:

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


当然,只有在您知道之前的轮数时,此代码段才会起作用。对于不同的轮数,可以使用递归。

尝试以下函数:

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以启动该数组。

尝试以下函数:

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点=6,在这种情况下不是3*3*3=27。@jkschneider:如果约翰不能连续赢两场比赛,情况就是这样,但他肯定能赢?也许我应该先阅读整个问题……我认为提前编写一个程序可能会使你对你遇到的问题产生偏见。在这些类型的考试中,有时最好是以一种清晰的开放的心态,对所有的可能性都开放。一旦你写了一个程序,你就有了一个解决问题的方法。我提交了一个修改你数学的编辑。应该是3点=6,在这种情况下不是3*3*3=27。@jkschneider:如果约翰不能连续赢两场比赛,情况就是这样,但他肯定能赢?也许我真的应该先看一下整个问题。。。