Loading...
SilviaSJ avatar SilviaSJ 3 Точки

Задача Game Number Wars

Здравейте, 

Може ли някой да ми каже, защо нe минава тази задача (66%) ?

https://pastebin.com/z3ahQgWq

https://pastebin.com/1R7KS3QB

 

Условието

Задача 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", се четат многократно по два реда:

  1. Карта, която дава първият играч- цяло число в интервала [2…9]
  2. Карта, която дава вторият играч -  цяло число в интервала [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):

  • Деси печели раздаването, защото 7 > 5 Точките, които печели от това раздаване, са:
  • – 5 = 2 -> Точките на Деси стават 2

Второ раздаване:

Деси дава тройка (3), Ники дава четворка (4):

  • Ники печели раздаването, защото 4 > 3. Точките, които печели от това раздаване, са:
  • – 3 = 1 -> Точките на Ники стават 1

Трето раздаване:

Деси дава тройка (3) и  Ники дава тройка (3):

  • Отпечатваме Number wars!
  • Прочитаме нови две карти:

       Деси дава петица (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):

  • Елена печели раздаването, защото 6 > 3 Точките, които печели от това раздаване, са:
  • – 3 = 3 -> Точките на Елена стават 3

Второ раздаване:

Елена дава двойка (2), Симеон дава петица (5):

  • Симеон печели раздаването, защото 5 > 2. Точките, които печели от това раздаване, са:
  • – 2 = 3 -> Точките на Симеон стават 3

Трето раздаване:

Елена дава осмица (8), Симеон дава деветка (9):

  • Симеон печели раздаването, защото 9 > 8. Точките, които печели от това раздаване, са:
  • – 8 = 1 -> Точките на Симеон стават 4

Получаваме End of game  и принтираме точките и на двамата.

Aleks

Georgi

4

5

3

2

4

3

4

4

5

2

Number wars!

Aleks is winner with 2 points

 

 

Тагове:
0
Programming Basics
Yargi avatar Yargi 29 Точки

Try this as input and you will see whats going wrong.

 

Kris

Kros

4

4

5

5

3

2

1

1

6

6

If both player have same values more than one time both of your codes don't work like they should.

0
09/09/2020 23:42:20
SilviaSJ avatar SilviaSJ 3 Точки

това също дава 66%...

https://pastebin.com/RNgiBAX8

Може ли да се направи тази задача само с един цикъл?

0
Yargi avatar Yargi 29 Точки

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.

0
11/09/2020 11:00:25
SilviaSJ avatar SilviaSJ 3 Точки

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

0
Yargi avatar Yargi 29 Точки

 Typo at line 33.

     if (card1 > card2) {
                        System.out.println("Number wars!");
                        System.out.printf("%s is winner with %d points", namePlayerOne, points1);
                        break;
                    } else if (card2 > card1) {
                        System.out.println("Number wars!");
                        System.out.printf("%s is the winner with %d points", namePlayerTwo, points2);
                        break;
                    }

remove " the" and you have it.

 

 

 

0
SilviaSJ avatar SilviaSJ 3 Точки

I thought I removed the "the"s but obviously I didnt. Thank  you so much.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.