Задача Game Number Wars
Здравейте,
Може ли някой да ми каже, защо нe минава тази задача (66%) ?
Условието
Задача 4. Игра на карти "Number wars"
"Numbers" е нова игра, която се играе с 36 карти (двойки, тройки, четворки, петици, шестици, седмици, осмици, деветки и десетки от всички 4 бои). Правилата на играта са следните:
- Играе се от двама играчи, които започват с равен брой карти
- На всяко раздаване всеки един от тях дава по 1 карта:
- Ако картата на първия играч е с по-голяма стойност от картата на втория играч, първият получава точки, които са равни на разликата между картата на първия и картата на втория (например: първият дава тройка купа, а вторият двойка каро -> първият печели, защото 3 > 2 и точките, които печели, са 3 – 2 = 1).
- Ако картата на втория играч е с по-голяма стойност от картата на първия играч, вторият получава точки, които са равни на разликата между картата на втория и картата на първия (например: вторият дава осмица пика, а първият шестица спатия -> вторият печели, защото 8 > 6 и точките, които печели, са 8 – 6 = 2).
- Ако картите, които дават двамата, са с еднаква стойност, тогава се получава "Number wars" и всеки един от играчите трябва да даде по още една карта. Играчът, чиято карта е с по-голяма стойност, печели и играта приключва(В този случай, няма да има еднакви карти).
- Освен при "Number wars", играта може да приключи и при команда "End of game". Тогава никой не печели и играта приключва.
Вход
Първоначално се четат два реда:
- Име на първия играч - текст
- Име на втория играч - текст
След това, до получаване на команда "End of game", се четат многократно по два реда:
- Карта, която дава първият играч- цяло число в интервала [2…9]
- Карта, която дава вторият играч - цяло число в интервала [2…9]
При еднакви карти на двамата играчи се прочитат нови два реда (карта, която дава първият и карта, която дава вторият.)
Изход
При случая, в който има "Number wars ", да се отпечата:
- "Number wars!"
- "{име на победителя} is winner with {брой натрупани точки} points"
При команда "End of game" да се отпечатат два реда:
- "{име на първия играч} has {брой натрупани точки за първия играч} points"
- "{име на втория играч} has {брой натрупани точки за втория играч} points"
Примерен вход и изход
Вход |
Изход |
Обяснения |
Desi Niki 7 5 3 4 3 3 5 3 |
Number wars! Desi is winner with 2 points |
Играчите са Деси и Ники Първо раздаване: Деси дава седмица (7), Ники дава петица (5):
Второ раздаване: Деси дава тройка (3), Ники дава четворка (4):
Трето раздаване: Деси дава тройка (3) и Ники дава тройка (3):
Деси дава петица (5), Ники дава тройка (3): 5 > 3 -> Деси печели играта Отпечатваме натрупаните точки (2) |
Elena Simeon 6 3 2 5 8 9 End of game |
Elena has 3 points Simeon has 4 points |
Играчите са Елена и Симеон Първо раздаване: Елена дава шестица (6), Симеон дава тройка (3):
Второ раздаване: Елена дава двойка (2), Симеон дава петица (5):
Трето раздаване: Елена дава осмица (8), Симеон дава деветка (9):
Получаваме End of game и принтираме точките и на двамата. |
Aleks Georgi 4 5 3 2 4 3 4 4 5 2 |
Number wars! Aleks is winner with 2 points |
|
това също дава 66%...
https://pastebin.com/RNgiBAX8
Може ли да се направи тази задача само с един цикъл?
Here is the solution without boolean flag,
https://pastebin.com/cGyrS9DW
if you want to do this with only one while-loop you have to do many if-else checks and also continue the while loop in case of number war.
In this case you would have to use a second boolean flag to exit the code after number wars.
I removed the boolean flag, I still get 66%... I even changed my code slightly to match yours. No idea what else could I be missing. Oh well.
https://pastebin.com/BXBpKuuH