Loading...
AnnaIvanova11 avatar AnnaIvanova11 21 Точки

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));
        }

   
    }
}

Тагове:
0
Programming Basics
kkaraivanov avatar kkaraivanov 486 Точки

Здравей. Направи променливите :

scholarshipSocial = minSalary * 0.35;
и
scholarship = grade*25;

ето така :

scholarshipSocial = Math.Floor(minSalary * 0.35);
и
double scholarship = Math.Floor(grade*25);

 

0
AnnaIvanova11 avatar AnnaIvanova11 21 Точки

Ох много благодаря, но пак не мина 93/100. Ето с корекция : 

 

double scholarshipSocial = Math.floor(minSalary * 0.35);

boolean isItUnderTwo = income > minSalary || (grade > 2 && grade <= 4.50);
boolean greaterScore = grade >= 5.50;
boolean isItSocial = (income < minSalary || grade > 4.50);

if (greaterScore){
    double scholarship = Math.floor(grade*25);

 

Не разбирам :(, грешката ми е на тест 14 от judge, какво ли му пуска като проверка, за да гърми.

P.S.: Иначе имах подобен случай с Math.ceil и floor при задачата sleepyCatTom, там не можах да схвана/ да се досетя и съвсем откровено налучках Math.ceil - a до като се чудех какво го мъчи ...

0
kkaraivanov avatar kkaraivanov 486 Точки

Ако искаш, ще ти дам линк към задачата, но е на С#.

0
kkaraivanov avatar kkaraivanov 486 Точки

Ето меоето решение на задачата:

using System;

namespace Scholarship
{
    class Program
    {
        static void Main(string[] args)
        {
            double incomePrice = double.Parse(Console.ReadLine());
            double averageSuccess = double.Parse(Console.ReadLine());
            double minimumSalary = double.Parse(Console.ReadLine());

            double scholarship = Math.Floor(minimumSalary * 0.35);
            double theBestSuccess = Math.Ceiling(averageSuccess * 25);
            double printEscelentScholership = 0;

            if (scholarship > theBestSuccess)
            {
                printEscelentScholership = scholarship;
            }
            else
            {
                printEscelentScholership = theBestSuccess;
            }

            if (incomePrice <= minimumSalary && averageSuccess > 4.5 && averageSuccess < 5.5)
            {
                Console.WriteLine($"You get a Social scholarship {scholarship} BGN");
            }
            else if (incomePrice <= minimumSalary && averageSuccess >= 5.5)
            {
                Console.WriteLine($"You get a scholarship for excellent results {printEscelentScholership} BGN");
            }
            else if (incomePrice > minimumSalary && averageSuccess >= 5.5)
            {
                Console.WriteLine($"You get a scholarship for excellent results {theBestSuccess} BGN");
            }
            else
            {
                Console.WriteLine("You cannot get a scholarship!");
            }
        }
    }
    public class MyClas
    {
        public MyClas(int myInt)
        {
            // logic and code for him
        }
    }

}

За Math.Ceil и Math.Floor може да те подведа с отговора си. Аз изграждам логиката си на база проблема в задачата, като ползвам Math.Ceil в изчисленията за да компенсирам загубите при закръгляне в реалните числа до цяло число. При извеждане на резултат, ако в условието не е посочено друго, ползвам Math.Floor за да илиминирам добавените закръглени стойности в изчислението. Математиката е точна наука, но в програмирането поради двоичното преобразуване в десетична бройна система с която сме свикнали да смятаме има разлики в стойностите. В C# и Java не съм тествал, но в С++ например: 

int a = 5;
int b = 3;
int c = a - b; // c ще бъде = 2

// но----->
double a = 5;
double b = 3;
double c = a - b; // c ще бъде равно на 2.0000003

Заради подобни стойности, дава грешка в изчисленията и Judge връща грешен отговор.

Естествено това си е мое обяснение на срещнатите проблеми до тук и неискам да те обърквам. Когато Judge ми върне грешка и се съмнявам в някои изчисления, проверявам кода и там където имам пресмятане с double и int ползвам Math.Ceil, а там където са double и double ползвам Math.Floor. Обикновено се получава, но ако не стане, търся друго решение. :)

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