Proszę o pomoc z napisaniem kodu do tego zadania w c++ :
Kozik z Adrianem grają w stopki. Gra polega na tym, że chłopcy ustawiają się w pewnej odległości od siebie, a następnie naprzemiennie poruszają się po linii prostej. Ruch polega na przejściu o długość własnej stopy do przodu. Wygrywa ten, który nastąpi na stopę przeciwnika.
Znając odległość chłopców od siebie oraz długości stóp, stwierdź, kto wygra pojedynek. Zakładamy, że Kozik zaczyna, ponieważ jest starszy.
WejściePierwszy i jedyny wiersz standardowego wejścia zawiera trzy liczby całkowite (), oznaczające odpowiednio odległość chłopców od siebie, długość stopy Kozika oraz Adriana.
WyjściePierwszy wiersz standardowego wyjścia powinien zawierać jedną liczbę całkowitą. Jeśli wygra Kozik, to powinniśmy wypisać , jeśli Adrian, to .
PrzykładDla danych wejściowych:
6 1 2poprawną odpowiedzią jest:
1" Life is not a problem to be solved but a reality to be experienced! "
© Copyright 2013 - 2024 KUDO.TIPS - All rights reserved.
Pierwszy pomysł (przynajmniej pierwszy pomysł początkujących programistów) to pójście na piechotę. To na piechotę bardzo łatwo zrobić: naprzemiennie idzie Adrian i Kozik, dopóki jeden na drugiego nie wejdzie:
#include <iostream>
using namespace std;
int main() {
int odl,dlK,dlM;
bool teraz=false; //1 - ruch Kozika, 0 - Adriana
cin >> odl >> dlK >> dlM;
while (odl >= 0) {
teraz=!teraz;
if (teraz==true) odl = odl - dlK;
if (teraz==false) odl = odl - dlM;
}
cout << teraz;
}
To rozwiązanie uzyskuje 76 punktów (sprawdzane na main.edu.pl). Uzyskuje tak dużo, ponieważ w większości testów mamy małe wartości.
Zauważmy jednak, iż liczba kroków maksymalnie różni się o 1. Można więc założyć:
dlK*n+dlM*n=odl, gdzie n to liczba kroków. Wyznaczamy pierwiastek równania: n = odl/(dlK+dlM). Możnaby dalej drążyć ten sposób, ale ja poszedłem na skróty i od odległości odjąłem iloczyn pomniejszonej liczby kroków o 1 i sumy długości kroków. Gdy ilość kroków jest pomniejszona o jeden, na pewno jeszcze na siebie nie wejdą, ale wtedy pętla while działa bardzo szybko. Ten kod uzyskuje 100: punktów
#include <iostream>
using namespace std;
int main() {
int odl,dlK,dlM;
bool teraz=false; //1 - ruch Kozika, 0 - Adriana
cin >> odl >> dlK >> dlM;
int n;
n = odl/(dlK+dlM);
odl = odl-(dlK+dlM)*(n-1);
while (odl >= 0) {
teraz=!teraz;
if (teraz==true) odl = odl - dlK;
if (teraz==false) odl = odl - dlM;
}
cout << teraz;
}