2017-03-01 23 views
0

私は最初のゲームを作成していて、いくつかの問題に遭遇しました。 私は常に7つのタイルを持っており、すべての可能な組み合わせを作る必要があります(最大5040) ファイルの例:13 01 02 24 14 12 25数字は、13のような各側の数字の数を意味します。 3ドットあります。 結果の例:C#ドミノゲームで可能なすべての組み合わせを見つける

31 10 02 24 41 12 25  
52 21 14 42 20 01 13  
31 12 24 41 10 02 25  
52 20 01 14 42 21 13  
... 

どうすればよいですか?私は、再帰を使用してみましたが、これは私が持っているものである を動作しませんでした。実際には

class Kauliukas 
{ 
    public int Dalis1 { get; set; } 
    public int Dalis2 { get; set; } 

    public Kauliukas(int dalis1, int dalis2) 
    { 
     Dalis1 = dalis1; 
     Dalis2 = dalis2; 
    } 

    public Kauliukas() 
    { 

    } 

} 

class KauliukuKonteineris 
{ 
    public const int MaxIlgis = 7; 
    private Kauliukas[] Kauliukai = new Kauliukas[MaxIlgis]; 
    public int Count { get; set; } 

    public KauliukuKonteineris(int size) 
    { 
     Kauliukai = new Kauliukas[size]; 
    } 
    public void Add(Kauliukas kauliukas) 
    { 
     Kauliukai[Count++] = kauliukas; 
    } 
    public Kauliukas Get(int index) 
    { 
     return Kauliukai[index]; 
    } 

} 

class Grandine 
{ 
    public static int MaxIlgis = 7; 
    private Kauliukas[] Kauliukai = new Kauliukas[MaxIlgis]; 
    public int Count { get; set; } 

    public Grandine(int size) 
    { 
     Kauliukai = new Kauliukas[size]; 
    } 
    public void Add(Kauliukas kauliukas) 
    { 
     Kauliukai[Count++] = kauliukas; 
    } 
    public Kauliukas Get(int index) 
    { 
     return Kauliukai[index]; 
    } 
} 

class GrandiniuKonteineris 
{ 
    public const int MaxGrandines = 5040; 
    private Grandine[] Grandines = new Grandine[MaxGrandines]; 
    public int Count { get; set; } 

    public GrandiniuKonteineris(int size) 
    { 
     Grandines = new Grandine[size]; 
    } 
    public void Add(Grandine grandine) 
    { 
     Grandines[Count++] = grandine; 
    } 
    public Grandine Get(int index) 
    { 
     return Grandines[index]; 
    } 
} 

class Program 
{ 
    public const int MaxKauliuku = 7; 
    public const string DataFile = "Kur3.txt"; 
    public const int MaxGrandiniu = 5040; 
    static void Main(string[] args) 
    { 

     KauliukuKonteineris Duomenys = new KauliukuKonteineris(MaxKauliuku); 
     Skaitymas(Duomenys); 
     GrandiniuKonteineris Rezultatai = new GrandiniuKonteineris(MaxGrandiniu); 
     GrandiniuSudarymas(Duomenys, Rezultatai); 
    } 

    /// <summary> 
    /// Duomenu nuskaitymas is failo ir sukelimas i konteinerine klase 
    /// </summary> 
    /// <param name="Duomenys"></param> 
    public static void Skaitymas(KauliukuKonteineris Duomenys) 
    { 
     using (StreamReader reader = new StreamReader(DataFile)) 
     { 
      string line = reader.ReadLine(); // Nuskaitoma visa eilute 
      string[] values = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Padalina skaicius 
      for(int i=0; i<values.Length; i++) 
      { 
       int dalis1 = int.Parse(values[i])/10; // Dvizenkli skaciu padalinus is 10 gaunamas skaitmuo esantis pirmoje pozicijoje 
       int dalis2 = int.Parse(values[i]) % 10; // Dvizenklio skaiciaus padalinto is 10 liekana - skaitmuo antroje pozicijoje 
       Kauliukas kauliukas = new Kauliukas(dalis1, dalis2); 
       Duomenys.Add(kauliukas); 
      } 
     } 
    } 
+0

あなたが試みた再帰をなぜ表示しないのですか? – Sam07

答えて

0

31 10 02 24 41 12 253 1 0 2 4 1 2 5と同じになり、あなたは7枚のタイルを持っていますが、彼らは唯一の値ので、8の異なる値を持つことができます彼らの側で一致する必要があります。

そうかもしれませんが、正しい方法につながります。結局、5040以上の組み合わせがあります:7つの異なる値を持つ8つの数字= 7^8 = 5,764,801の異なる組み合わせ。重複したタイルを許可すると、それは当てはまります。そうでない場合は、他の回答にどのくらいの組み合わせが得られるかが示されます。

どちらの場合でも、私はそれらを記憶に残そうとは勧めません。

関連する問題