2

次のことをシミュレートするプログラムを書きたいと思います。6つのサイコロがあり、毎回いくつかのサイコロを振っています。

私がダイスでロールしないとき、私はそれで0をロールしたと思います。

この方法で取得できるすべての可能なバリエーションをリストしたいと思います。いくつかの例:

1,2,4,6,0,1

3,5,1,0,0,4

6,6,4,2,0,0など。

これを行う方法についてのアイデアはありますか?(私はJavaを使用していますが、もちろん私は一般的な概念にのみ興味があります。)

前もって感謝します。

4

5 に答える 5

3

「一般的な概念のみ」を具体的に求めたので、次の2つの一般的なアプローチがあります。

  • 6レベルのネストされたforループを使用して、0-6(より効率的な)間で可能なすべてのロールを網羅的に列挙します。
  • 1つのforループを使用して、の間のすべての数値を生成し、 ;0-66666を含む数値を破棄します。7, 8, 9次に、フォーマットされたパディングとコンマを使用して数値を印刷します(効率のわずかな違いを気にしない場合は、よりクリーンなコードを確認してください)
于 2012-12-08T19:18:51.123 に答える
3

深さを追跡しながら再帰的な方法を使用できます:編集、おそらくこの方法の方が良いでしょう:

class Main {
    public static void roll(String s, int depth) {
        if(depth == 0)
            System.out.println(s.substring(1));
        else
            for(int i = 0; i <= 6; i++)
                roll(s + "," + i, depth - 1);
    }
    public static void main(String[] args) {
        roll("", 6); //2nd parameter > 0
    }
}
于 2012-12-08T19:27:37.430 に答える
1

エレガンスのために、特定のインデックスに対して0〜7のループを呼び出し、次にそれ自体を呼び出して次のインデックスを初期化する再帰メソッドを記述します。

次に、配列またはabritraryサイズを初期化できます。

于 2012-12-08T19:28:58.680 に答える
0

単純なPythonの実装。

これはあなたがただ印刷するときです。

def PrintAllPerms(n, str_):
    if (n == 0):
        print str_
    else:
        for i in ["1","2","3","4","5","6"]:
            str_ = str_ + i
            PrintAllPerms(n-1, str_)
            str_ = str_[:-1]

PrintAllPerms(2,"")

これは、順列全体を返したい場合です。

def PrintAllPerms(n, arr, str_):
    if (n == 0):
        arr.append(str_)
        return arr
    else:
        for i in ["1","2","3","4","5","6"]:
            str_ = str_ + i
            arr = PrintAllPerms(n-1,arr,str_)
            str_ = str_[:-1]
        return arr

PrintAllPerms(2,[],"")
于 2017-06-05T03:24:46.930 に答える
-2
public class DiceTest {
    public static void main(String[] args) {
        int[] dice = {0, 1, 2, 3, 4, 5, 6 };
        for (int i : dice) {
            for (int j : dice) {
                System.out.println("Printing dice values : " + i + " " + j);
            }
        }
    }
}
于 2018-12-19T16:18:23.560 に答える