Професионална програма
Loading...
davichonov365 avatar davichonov365 127 Точки

Проблем със Задача 6 ( Bonus Score) от лекция "Логически Проверки"

Имам проблем със задача 6 от Логически проверки:

1.Как да избегна противоречието в отговорите,. примерно в условието е дадено число по голямо от 100 и второ условие число по голямо от 1000 ,.. но ако напиша 5698 примерно -то покрива и двете условия и ми изкарва 4 отговора и ми гърми всеки път в judge

 

Тагове:
0
Programming Basics
dddinkobakalov avatar dddinkobakalov 22 Точки

Защо не качиш един вариант на твоето решение в http://pastebin.com/ и да го прегледаме, така можем да ти кажем къде точно грешиш, дали е изчислителна грешка, или нещо в подредбата на кода. 

0
davichonov365 avatar davichonov365 127 Точки

http://pastebin.com/UemevuxF

Дава ми 50 точки,. знам че е дълго и непрактично ,. като за начинаещ :)

 

 

 

0
btonew avatar btonew 43 Точки

Правиш излишен брой проверки, които те объркват допълнително. Няма да ти пращам моето решение щом искаш да опиташ сам, но ще се опитам да ти помогна с насоки.

Като начало си създай една променлива от тип double, която ще играе ролята на бонуса, и ще променяш през цялото време. Сега трябва да започнеш с проверките от условието:

1. провери дали входът е > 1000, след което бонусът ще е входът * 0.1

2. провери дали входът е > 100, след което бонусът ще е входът * 0.2

3. нито едно от двете? бонусът е 5

4. провери дали входът се дели на 2 без остатък, ако се дели - добави +1 към бонуса

5. провери дали входът завършва на 5 -> добавяш 2, ако е такъв случаят, и дотук с проверките. Сега изкарай исканият изход.

0
dddinkobakalov avatar dddinkobakalov 22 Точки

Според мен няма смисъл толкова много ифове да използваш един в друг. Мисля че там ти бяга логиката и затова и решението ти дава само 50 точки. А и коментирахме по-горе да започнеш първо с ИФ за големите числа if (num > 1000). За да не ти го дублира след като преди него си сложил if (num > 100). 

Също така може да си изнесеш бонусите отделно. Един път за това дали числото е до 100, до 1000, или над хиляда, и един път за другите условия, да завършва на 5 и да е четно мисля беше. И накрая да си добавиш бонуса към числото. Например накрая си въвеждаш бонуса, а след това си го добавяш към числото:

  1.  Console.WriteLine(bonusScore);

  2.  Console.WriteLine(num + bonusScore);

 

0
dddinkobakalov avatar dddinkobakalov 22 Точки

Да, аз смятам по същия начин и му написах подобен коментар. Няма нужда толкова проверки една в друга да прави. Може да се опита да си ги сметне по възможно най- простия начин и накрая да си ги събере бонусите. АКо имаш нужа пиши и ще ти изпратим и готов вариант, може като го погледнеш и да ти светне. Ще видиш че си на прав път, даже малко си усложняваш сам нещата.

0
davichonov365 avatar davichonov365 127 Точки

Аз разбирам логиката,. но още не мога да го напиша като смислен код ,. затова отначало ми даваше по два отговора ,. примерно 17567 като вход отговаря и на двете условия ,. по голямо от 100 и 1000 ,. интересно ми е да видя стегнато и кратко решение в няколко реда,. начина на мислене !

Мерси

0