Mock Exam 2 Game JS?

Здравейте днес се упражних с Mock Exam 2 и на задачата Game ми гърмеше но не виждах защо след час и половина реших да провря защо като написах if() във който ако излязат определените проблемни отговори да изпише входът вместо отговорът за да проверя. Знам, че е мамене и, че е грешно но просто твърде много време отделих и искам да попитам дали греша със следното? Ето го кода https://pastebin.com/DFEzYrL6 задачата гласи да се намери най-голямото число с умножение или събиране, тоест при вход 1 8 9 най-голямото е 1+8 * 9=73 нали? но judge смята, че верният отговор е 72(1 * 8 * 9)? Същото е и с 1 2 8 което е 1+2 * 8=17 но той смята че е 16(1 * 2 * 8) и с 0 5 8 което е 0+5*8=40 не 13(0+5+8)? Задачата не трябва да се реши само с + или само с умножение пробвах и така но всичко гърми тогава! Къде греша?

1 Like

Здравей,

Имаш 4 основни случая при комбиниране на числата.

1. a + b + c
2. a + b * c
3. a * b * c
4. a * b + c

Можеш а[0], a[1] и a[2] да ги запазиш в променливи, понеже числото, което ти се подава винаги ще е 3-цифрено, а и по-лесно ще се ориентираш в кода. Помисли коя Math функция можеш да използваш, която да ти улесни живота.

Иначе, това което забелязвам в кода ти е, че при втория if statement проверяваш дали всяко число е различно от нула и ако първото число е 0 - събираш с останалите две, обаче ако не е нула, влизаш в else-а, където умножаваш трите числа. Не винаги това ще е вярно, например числото - 123:
1 + 2 * 3 = 7
1 * 2 * 3 = 6
Тоест няма гаранция, че щом първото число е различно от нула, най-голямата комбинация от трите числа ще е само с умножение и оттам най-вероятно гърмят няколко кейса.

1 Like

Здравей @nminev42 благодаря ти за отговора но тук казваш “Иначе, това което забелязвам в кода ти е, че при втория if statement проверяваш дали всяко число е различно от нула и ако първото число е 0” аз не проверявам дали е 0 а дали е 1 ако е 1 го събирам след като ако го умножа в примера 1 2 3 кодът изпълнява 1+2*3 в elsa влизам само когато е различно от 0 и 1 след като първият if проверява за 0(може да не съм те разбрал но колкото и пъти да го прочета това виждам). И не мога да се сетя за коя Math функция говориш най-близкото нещо за което се сещам е %100, %10. Благодаря ти отново за помощта но с нея и ти потвърди което питам в примера 1 8 9 най-голямото е 1+8 * 9=73 но judge твърди, че е 72(1 * 8 * 9).

Поздрави,
Кирил!

1 Like

Здравей, да, прав си. Хванал си единичният случай с 1-цата с nested if-a, но също така има вариант, в който input-a да е 113. Тогава няма да влезе в никоя от проверките в първият if и ще влезе във втория - там a ще е равно на 1 и кода ти ще сметне a + b * c, защото а е 1. Резултата ще е 1 + 1 * 3 = 4, което не е най-големият сбор от трите числа(1 + 1 + 3).

Не съм сигурен за случая със 72 - като гледам моето решение output-a наистина е 72, а сигурен ли си че input-a ти е 189? Иначе визирах Math.max(). Можеш всеки от изразите да го запишеш в променлива и да ползваш Math.max() - аз така съм я решил.

Здравей отново благодаря не се бях сетил за две единици ако има за това дали imputa е така просто написах if(fin==73(моят отговор)||fin==40||fin==17) {print(a)} това ми изкарва входа както отгоре казах знам, че е мамене и, че е грешно но вече бях отделил час и половина над това и нямах много време просто вече исках да видя къде греша. За Math.max() след като ползвам array просто го сортирам с a.sort(function(a, b){return a - b}); така винаги последното ще е най-голямото в случая ще е а[2].

Имам предвид да ползваш Math.max() на резултатите от четирите операции(result 1 =a+b+c, result2 = a+b*c… и тн.), по този начин винаги ще ти принтира най-големият сбор от трите числа. Няма нужда да сортираш.

1 Like