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

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

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

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

 

Тагове:
0
Programming Basics
LiGuru avatar LiGuru 15 Точки

Понеже не си дал код, ще отговоря принципно.

Проверявайте първо за най-голямото число.

 

if (num > 1000)
if (num > 100)

.....

Задавай си рейндж

if (num > 100 && num < 1000)

....

 

0
davichonov365 avatar davichonov365 127 Точки

Веднага го пробвам !! Мерси

0
dddinkobakalov avatar dddinkobakalov 22 Точки

Здравей,

в случая ти може би все още не си взел този тип допълване на уловието в ИФ - if (num > 100 && num < 1000),

затова най- лесния начин да избегнеш противоречието е като подреждаш ифовете в такава последователност:

1. Започваш с 

if (num > 1000)
            {
                bonusScore = num * 10 /100;
               
                
            }

и програмата изпълнява този бонсу при числа над 1000, сед което задаваш нов ИФ, който ако не е число над 1000 да бъде изпълнен:

2. 

else if (num > 100)
            {
                bonusScore = num * 20 / 100;
                
                
            }

Ако го зададеш с два ИФ-а или по обратен ред, ще имаш дублирането на бонуса.

Принципно в следващата ти лекция ще разгледате как да комбинирате такива резултати от някакъв параметър до друг параметър, както  е показал колегата по-горе

Успех! 

0
17/07/2016 20:32:17
davichonov365 avatar davichonov365 127 Точки

Ще пробвам и този вариант,. като цяло в judge ми дава 50 точки,.ще го измисля ,.гледам да стигна сам до решението а не да препиша нещо готово,. мерси

0
btonew avatar btonew 43 Точки

Увери се, че изчисленията ти са правилни. Това е най-вероятната причина за 50/100 резултат.

0
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
Kamen1981 avatar Kamen1981 1 Точки

За да не се бъркаш в началото можеш да го направиш така:

if (num > 100 && num <= 1000) 

{

 

}

else if (num > 1000) 

{

}

0