我创造了我的第一个游戏并遇到了一些问题。 我总是有7个瓷砖,我需要做所有可能的组合(最多5040) 文件示例:13 01 02 24 14 12 25数字表示每侧有多少个数字,例如13个一个图块边有1个点,另一个有3个点。 结果示例:
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 :(得分:0)
事实上,31 10 02 24 41 12 25
与3 1 0 2 4 1 2 5
相同,你有7个图块,但它们只能有8个不同的值,因为值必须在它们的边上匹配。
所以也许这会以正确的方式引导你。最后,您将拥有超过5040种组合:8个数字,7个不同的值= 7 ^ 8 = 5,764,801种不同的组合。如果您允许重复的图块,则为真。如果没有,则在另一个答案中显示您将获得多少组合。
然而,在任何一种情况下,我都不建议将它们留在记忆中。