Scholarship - Conditional Statements - Java
Здравейте,
Judge ми дава 93/100, не мога да си открия грешката, ако може малко помощ.Благодаря предварително.
import java.util.Scanner;
public class scholarship {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
double income = Double.parseDouble(scan.nextLine());
double grade = Double.parseDouble(scan.nextLine());
double minSalary = Double.parseDouble(scan.nextLine());
double scholarshipSocial = minSalary * 0.35;
boolean isItUnderTwo = income > minSalary || (grade > 2 && grade <= 4.50);
boolean topScore = grade >= 5.50;
boolean isItSocial = (income < minSalary || grade > 4.50);
if (topScore){
double scholarship = grade*25;
if (scholarship >= scholarshipSocial){
System.out.printf("You get a scholarship for excellent results %.0f BGN",Math.floor(scholarship));
}else {
System.out.printf("You get a Social scholarship %.0f BGN",Math.floor(scholarshipSocial));
}
} else if (isItUnderTwo){
System.out.println("You cannot get a scholarship!");
}else if (isItSocial){
System.out.printf ("You get a Social scholarship %.0f BGN",Math.floor(scholarshipSocial));
}
}
}
Ох много благодаря, но пак не мина 93/100. Ето с корекция :
Не разбирам :(, грешката ми е на тест 14 от judge, какво ли му пуска като проверка, за да гърми.
P.S.: Иначе имах подобен случай с Math.ceil и floor при задачата sleepyCatTom, там не можах да схвана/ да се досетя и съвсем откровено налучках Math.ceil - a до като се чудех какво го мъчи ...
Ако искаш, ще ти дам линк към задачата, но е на С#.
Ето меоето решение на задачата:
За Math.Ceil и Math.Floor може да те подведа с отговора си. Аз изграждам логиката си на база проблема в задачата, като ползвам Math.Ceil в изчисленията за да компенсирам загубите при закръгляне в реалните числа до цяло число. При извеждане на резултат, ако в условието не е посочено друго, ползвам Math.Floor за да илиминирам добавените закръглени стойности в изчислението. Математиката е точна наука, но в програмирането поради двоичното преобразуване в десетична бройна система с която сме свикнали да смятаме има разлики в стойностите. В C# и Java не съм тествал, но в С++ например:
Заради подобни стойности, дава грешка в изчисленията и Judge връща грешен отговор.
Естествено това си е мое обяснение на срещнатите проблеми до тук и неискам да те обърквам. Когато Judge ми върне грешка и се съмнявам в някои изчисления, проверявам кода и там където имам пресмятане с double и int ползвам Math.Ceil, а там където са double и double ползвам Math.Floor. Обикновено се получава, но ако не стане, търся друго решение. :)
Ами добре да, благодаря ти, принципа нали трябва да е индентичен, само езика различен.
Нещо друго интересно обаче, което не разбирам, защо е така, ако мога да питам.Благодаря, че ми отговаряш... хаха
Тези двете задачи,единствения начин, по който ми премиха в judge беше, като закръгля операциите с Math.ceil, а резултата с floor:
Harvest
sleepyCatTom
Знам си, че кода ми е дървен , но се притеснявам, че в логиката ми бяга нещо. Знаеш ли защо трябва да закръгля операциите със ceil ? Или като цяло нещо не съм разбрала? Сигурно ми е глупаво питането, ама все пак