Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 3 KB
#define SZORGALMI
using System;
namespace Tablajatek
{
public struct Mezo
{
private int m_Ugras;
private byte m_Ertek;
public Mezo(int ugras, byte ertek)
{
m_Ugras = ugras;
m_Ertek = ertek;
}
public int Ugras
{
get { return m_Ugras; }
}
public byte Ertek
{
get { return m_Ertek; }
}
#if SZORGALMI
public bool Csapda
{
get { return Ertek >= 1 && Ertek <= 6; }
}
public bool EgyszerKimarad
{
get { return Ertek == 7; }
}
#else
public bool EgyszerKimarad
{
get { return Ertek > 0; }
}
#endif
}
public struct Jatekos
{
private int m_MezoIndex;
private bool m_Kimarad;
public int MezoIndex
{
get { return m_MezoIndex; }
set { if (value >= 0) m_MezoIndex = value; }
}
public bool Kimarad
{
get { return m_Kimarad; }
set { m_Kimarad = value; }
}
public void Starthoz()
{
MezoIndex = 0;
Kimarad = false;
}
}
public class Jatek
{
int N = 0;
int M = 0;
Mezo[] mezok;
Jatekos[] jatekosok;
Random kocka = new Random();
public Jatek()
{
Beolvas();
}
private int Dobas()
{
return kocka.Next(6) + 1;
}
private void Kiut(int mezoIndex)
{
for (int i = 0; i < jatekosok.Length; i++)
if (jatekosok[i].MezoIndex == mezoIndex)
jatekosok[i].Starthoz();
}
private bool Kor()
{
bool vege = false;
int dobas, index;
for (int i = 0; i < jatekosok.Length && !vege; i++) {
dobas = Dobas();
index = jatekosok[i].MezoIndex;
if (jatekosok[i].Kimarad) {
jatekosok[i].Kimarad = false;
continue;
}
#if SZORGALMI
if (mezok[index].Csapda) {
if (mezok[index].Ertek == dobas)
dobas = Dobas();
else
continue;
}
if (index + dobas >= N)
index = N - (index + dobas - N) - 2;
else
index += dobas;
#else
index += dobas;
if (index >= N)
index = N - 1;
#endif
index = mezok[index].Ugras;
Kiut(index);
jatekosok[i].MezoIndex = index;
jatekosok[i].Kimarad = mezok[index].EgyszerKimarad;
if (index == N - 1)
vege = true;
}
return vege;
}
private int Jatszma()
{
int kor = 0;
for (int i = 0; i < jatekosok.Length; i++)
jatekosok[i].Starthoz();
do
kor++;
while (!Kor() && kor <= 30000);
return kor;
}
private double AtlagKorokSzama()
{
const int JatszmakSzama = 1000;
double atlag = 0.0;
for (int i = 0; i < JatszmakSzama; i++)
atlag += Jatszma();
return atlag / JatszmakSzama;
}
private void Beolvas()
{
try {
System.IO.StreamReader sr = new System.IO.StreamReader("jatek1.be");
string[] sor;
sor = sr.ReadLine().Split();
N = int.Parse(sor[0]);
M = int.Parse(sor[1]);
mezok = new Mezo[N];
jatekosok = new Jatekos[M];
for (int i = 0; i < N; i++) {
sor = sr.ReadLine().Split();
mezok[i] = new Mezo(int.Parse(sor[0]) - 1, byte.Parse(sor[1]));
}
sr.Close();
}
catch {
Console.Error.WriteLine("Hiba a fajl betoltesenel!");
System.Environment.Exit(1);
}
}
public void Kiir()
{
Console.WriteLine(AtlagKorokSzama());
Console.ReadLine();
}
}
public class Program
{
public static void Main(string[] args)
{
Jatek jatek = new Jatek();
jatek.Kiir();
}
}
}