Zadanie na podstawie Ligi Zadaniowej projektu „Zdolni z Pomorza”
Trzej gracze, ponumerowani: 1,2,3, przesuwają pionki na planszy o polach pomumerowanych od 0 do 30, każdy gracz ma jeden pionek.
Na początku wszystkie trzy pionki stoją na polu 0. W każdej kolejce gracze rzucają kostką. Gracz przesuwa swój pionek o wyrzuconą liczbę oczek pod warunkiem, że nie przekroczy mety. Jeśli wynik przekroczyłby metę, to gracz nie wykonuje ruchu, zostaje w miejscu.
W pliku tekstowym kolejki.txt jest zapisane:
w pierwszym wierszu: liczba kolejek n
w następnych n wierszach są po 3 liczby całkowite, rzuty graczy w kolejce, z zakresu <1,6>
Gracz który stanął na mecie samotnie – wygrywa. Jeśli podczas jednej kolejki na mecie stanęło dwóch lub trzech graczy, to gra jest nierozstrzygnięta.
Napisz program który odczyta dane z pliku i poda numer zwycięzcy, lub poinformuje że nie ma zwycięzcy.
Przykładowe dane:
8 wynik: wygrał gracz nr 2 |
9 6 5 2 5 4 4 1 6 1 6 5 4 5 4 2 6 3 6 3 2 3 5 5 2 4 1 6 wynik: nie ma zwycięzcy, dwóch graczy stanęło na mecie w tej samej, ostatniej kolejce |
6 6 5 2 5 4 4 1 6 1 6 5 4 5 4 2 6 3 6 wynik: nikt nie wygrał, żaden z graczy nie dotarł do mety |
---|
#include <iostream>
#include <fstream>
using namespace std;
int main() {
int meta=30;
int n; // liczba kolejek
int r; // ruch biezacego gracza
int P[3]; // aktualne pole gracza
for (int j=0; j<3; j++) P[j]=0; // na początku wszyscy staja na polu 0
ifstream we("kolejki2.txt");
we>>n;
int i=0; // licznik kolejek
int iluNaMecie=0;
int wygral;
while (i<n) {
i++;
cout<<"kolejka "<<i<<":\t";
// dla kazdego gracza
for (int j=0; j<3; j++)
{
// wczytaj jego ruch
we>>r;
// jesli nie przekroczy mety, to przesun gracza na nowe pole
if (P[j]+r<=meta) P[j] += r;
cout<<P[j]<<"\t";
// jesli j-ty gracz stoi na mecie
if (P[j]==meta) {
iluNaMecie++;
wygral=j+1;
}
}
cout<<endl;
}
cout<<"wygral ";
if (iluNaMecie==1) cout<<wygral<<endl; else cout<<"-\n";
return 0;
}