Loading...
Instigator avatar Instigator 1 Точки

Затруднение при задача *Стипендии

Здравейте колеги,

Дава ми 75% на долното решение в Judge и не мога да разбера къде може да са грешките, понеже в Judge ми излиза само (Incorrect answer).

Благодаря за съдействието.

 

Условие!

 

Учениците могат да кандидатстват за социална стипендия или за стипендия за отличен успех. Изискване за социална стипендия - доход на член от семейството по-малък от минималната работна заплата и успех над 4.5. Размер на социалната стипендия - 35% от минималната работна заплата. Изискване за стипендия за отличен успех - успех над 5.5, включително. Размер на стипендията за отличен успех - успехът на ученика, умножен по коефициент 25.

Напишете програма, която при въведени доход, успех и минимална работна заплата, дава информация дали ученик има право да получава стипендия, и стойността на стипендията, която е по-висока за него.

Вход

Потребителят въвежда 3 числа, по едно на ред:

  1. Доход в лева - реално число в интервала [0.00..6000.00]
  2. Среден успех -  реално число в интервала [2.00...6.00]
  3. Минимална работна заплата - реално число в интервала [0.00..1000.00]

Изход

  • Ако ученикът няма право да получава стипендия, се извежда:
  • You cannot get a scholarship!"
  • Ако ученикът има право да получава социална стипендия и тя е по-висока от стипендията за отличен успех:
    "You get a Social scholarship {стойност на стипендия} BGN"
  • Ако ученикът има право да получава стипендия за отличен успех и тя е по-висока или равна по стойност на социалната стипендия за него:
  • "{стойност на стипендията} BGN"

Резултатът се закръгля до по-малкото цяло число.

 

 

 

 

 

 

Примерен вход и изход

Вход

Изход

Обяснения

480.00

4.60

450.00

You cannot get a scholarship!

Доходът от 480 лв. е по-висок от минималната работна заплата 450 лв. →  ученикът не може да получава социална стипендия.

Успех 4.60 < 5.50 → ученикът не може да получава стипендия за отличен успех.

300.00

5.65

420.00

You get a Social scholarship 147 BGN

300 лв. < 420 лв. и 5.65 >4.50 →  ученикът може да получава социална стипендия 35% * 420 лв. = 147 лв.

Успех 5.65 > 5.50 → ученикът може да получава стипендия за отличен успех 5.65 * 25 = 141.25 лв.

147 лв. > 141.25  лв. → ученикът ще получава социална стипендия.

 

 

using System;

public class Program
{
    public static void Main()
    {
        double dohod = double.Parse(Console.ReadLine());
        double uspeh = double.Parse(Console.ReadLine());
        double zaplata = double.Parse(Console.ReadLine());
        double stip = uspeh * 25;
        double zaplataStip = zaplata * 0.35;
        if (dohod > zaplata && uspeh < 5.5 && dohod >=0 && dohod <= 6000 && zaplata >=0 && zaplata <= 1000 && uspeh >=2 && uspeh <=6)
        {
            Console.WriteLine("You cannot get a scholarship!");
        }
        else if (dohod < zaplata && uspeh < 5.5 && dohod >=0 && dohod <= 6000 && zaplata >=0 && zaplata <= 1000 && uspeh >=2 && uspeh <=6)
        {
            Console.Write("You get a Social scholarship ");
            Console.Write(Math.Floor(zaplataStip));
            Console.WriteLine(" BGN");
        }
        else if (dohod > zaplata && uspeh > 5.5 && dohod >=0 && dohod <= 6000 && zaplata >=0 && zaplata <= 1000 && uspeh >=2 && uspeh <=6)
        {
            Console.Write("You get a scholarship for excellent results ");
            Console.Write(Math.Floor(stip));
            Console.WriteLine(" BGN");
        }
        else if (dohod < zaplata && uspeh > 5.5 && dohod >=0 && dohod <= 6000 && zaplata >=0 && zaplata <= 1000 && uspeh >=2 && uspeh <=6)
        {
            if (stip > zaplatax)
            {
                Console.Write("You get a scholarship for excellent results ");
                Console.Write(Math.Floor(stip));
                Console.WriteLine(" BGN");
            }
            else if (stip < zaplatax)
            {
                Console.Write("You get a Social scholarship ");
                Console.Write(Math.Floor(zaplataStip));
                Console.WriteLine(" BGN");
            }
        }
    }
}

1
Programming Basics with C#
user184 avatar user184 14 Точки

Здравей,

Виждам че си правил и проверки свързани с ограниченията за вход от конзолата, но защо? Само ти задръстват кода и правят засичането на грешки и бъгове много по - трудно.

Прочети си внимателно условието на задачата, мини през всеки ред и идеално изчисти тези ненужни проверки за да ти е по лесно на теб.

Имай предвид, че социална стипендия се взима при успех над 4.50. Стипендията за отличен се взима при 5.50(включително) и нагоре. Тези последни две if проверки които са отделно от другите не трябва да са. Ако ученик отговаря на всички критерии  се избира коя стипендия да взима в зависимост от това коя е по - високата.

0
Instigator avatar Instigator 1 Точки

Благодаря! Условието е важно нещо :)

0
Madjarov_G avatar Madjarov_G 53 Точки

Колега , правиш прекалено много излишни проверки 

  1. Доход в лева - реално число в интервала [0.00..6000.00]
  2. Среден успех -  реално число в интервала [2.00...6.00]
  3. Минимална работна заплата - реално число в интервала [0.00..1000.00]

Горепоказаните граници са за входа който Judge  ще вкарва , няма смисъл да проверяваш дали входа ще е в тези граници.

Само с if-else if няма да стане , по-лесно е с вложен if  , в който проверяваш при дадена ситуация , примерно оценка между 4,5 и 5,5 , дали нещо е вярно , заплатата дали е по-малка от минималната заплата.

 

Ето решение : https://pastebin.com/UKNWahau

0
19/09/2018 06:18:07
DenislavGerdanov avatar DenislavGerdanov 0 Точки

Здрасти,

Аз я реших по ето този начин :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _7.Scholarships
{
    public class Scholarships
    {
        public static void Main(string[] args)
        {
            double income = double.Parse(Console.ReadLine());
            double averageGrade = double.Parse(Console.ReadLine());
            double minSalary = double.Parse(Console.ReadLine());
            double socialScolarship = minSalary * 0.35;
            double excellenceScolarship = averageGrade * 25;

            if (income < minSalary && socialScolarship > excellenceScolarship && averageGrade > 4.50)

            {
                Console.WriteLine($"You get a Social scholarship {Math.Floor(socialScolarship)} BGN");
            }
            else if (averageGrade >= 5.50)
            {
                Console.WriteLine($"You get a scholarship for excellent results {Math.Floor(excellenceScolarship)} BGN");
            }
            else if (income > minSalary || averageGrade < 5.50)
            {
                Console.WriteLine("You cannot get a scholarship!");
            }


        }
    }
}

но ми дава 87/100

къде  греша ? 

Благодаря предварително

0
CTaHu avatar CTaHu 0 Точки
И мен ме поизмъчи тази задачка, но все пак с упоритост успях да я преборя.
Много бързо и от първия опит изкарах 93/100, с този код: https://pastebin.com/rhN9cFnF
За съжаление една от проверките на Judge върна грешка.
Последвалите ми опити да докарам 100/100 дълго време даваха същата грешка.
КЛЮЧЪТ СЕ СЪСТОИ В ТОВА ДА СЕ РАЗГЛЕДАТ СЛУЧАИТЕ, ПРИ КОИТО СТУДЕНТЪТ ПОКРИВА КРИТЕРИИТЕ И ЗА ДВЕТЕ СТИПЕНДИИ. Условието на задачата гласи, че стипендиите се получават в условията на алтернативност, т.е. или едната, или другата. А идеята е да се кандидатства аз по-високата от тях.

Това се оказа разковничето за набиране на печалившата комбинация и резултат 100/100.

Маркираната в червено по-долу добавка увенча с успех усилията ми.

package c_ConditionalStatements;

import java.util.Scanner;

public class Scholarship {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double Income = Double.parseDouble(scanner.nextLine());
        double AvGrade = Double.parseDouble(scanner.nextLine());
        double MinSalary = Double.parseDouble(scanner.nextLine());
        double SocSch = 0.35 * MinSalary;
        double GradeSch = 25 * AvGrade;

        if (AvGrade >= 5.5 & Income < MinSalary & SocSch >= GradeSch) {
            System.out.printf("You get a Social scholarship %.0f BGN", Math.floor(SocSch));
        }  else if (AvGrade >= 5.5 & Income < MinSalary & SocSch < GradeSch) {
            System.out.printf("You get a scholarship for excellent results %.0f BGN", Math.floor(GradeSch));
        }  else if (AvGrade > 4.5 & Income < MinSalary) {
            System.out.printf("You get a Social scholarship %.0f BGN", Math.floor(SocSch));
        }  else if (AvGrade >= 5.5){
            System.out.printf("You get a scholarship for excellent results %.0f BGN", Math.floor(GradeSch));
        } else {
            System.out.println("You cannot get a scholarship!");
        }
    }
}
0
20/11/2018 00:47:20
svilendotorg avatar svilendotorg 2 Точки

Ето и моето решение със 100т. в Judge.

Странното е, че в условието не е зададено дохода да е по-малък ИЛИ равен на минималния доход, докато Judge проверява това и дава 93% ако направите да е само с < ... Т.е. има разминаване между условието и проверката :/

            //INPUT
            double income = double.Parse(Console.ReadLine());
            double grade = double.Parse(Console.ReadLine());
            double minIncome = double.Parse(Console.ReadLine());
            //CALCULATE
            double socialScholarship = 0;
            double highGradeScholarship = 0;
            socialScholarship = Math.Floor(minIncome * 0.35);
            highGradeScholarship = Math.Floor(grade * 25);
            //RESULT
                 if (income <= minIncome && grade >= 5.5 && highGradeScholarship >= socialScholarship) Console.WriteLine($"You get a scholarship for excellent results {highGradeScholarship} BGN");
            else if (income <= minIncome && grade >= 5.5 && highGradeScholarship < socialScholarship) Console.WriteLine($"You get a Social scholarship {socialScholarship} BGN");
            else if (income <= minIncome && grade > 4.5) Console.WriteLine($"You get a Social scholarship {socialScholarship} BGN");
            else if (income > minIncome && grade >= 5.5) Console.WriteLine($"You get a scholarship for excellent results {highGradeScholarship} BGN");
            else Console.WriteLine("You cannot get a scholarship!");
 

 

0
magdalena02 avatar magdalena02 0 Точки

Здравейте, от няколко дни го мъча това решение, но в Judge ми дава 87/100. Не мога да разбера къде е грешката. Програмата си тръгва в IntelliJ.

 

package CondtionalStatemants;

import java.util.Scanner;

public class SholarShip {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        double salaryLv = Double.parseDouble(scan.nextLine());
        double sredenuspeh = Double.parseDouble(scan.nextLine());
        double minSalary = Double.parseDouble(scan.nextLine());

        double socialSholar = 0.0;
        double sholar = 0.0;
        boolean isApprove = false;
        String output="";

        if (salaryLv < minSalary) {
            if (sredenuspeh >4.5) ;
            {
                socialSholar = Math.floor(minSalary * 0.35);
                isApprove = true;
            }
        }
        if (sredenuspeh >= 5.5) {
            sholar = Math.floor(sredenuspeh * 25);
            isApprove = true;
        }
        if (sholar >= socialSholar) {
            output = String.format("You get a scholarship for excellent results %.0f BGN", sholar);
        } else {
            output = String.format("You get a Social scholarship %.0f BGN", socialSholar);
        }
        if (!isApprove) {
            output = "You cannot get a scholarship!";
        }
        System.out.println(output);
    }
}
0
krum_43 avatar krum_43 756 Точки

Ето още едно решение (100/100).

https://pastebin.com/PAye2CWy

0
E.gabrowska avatar E.gabrowska 1 Точки

Наистина ужасна задача!!!

2 дни я мъчих и аз, но накрая с помощта Ви успях :)

Благодаря!

Ето и моето решение на Java: 

import java.util.Scanner;

public class Scholarship {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double income = Double.parseDouble(scanner.nextLine());
        double average_progress = Double.parseDouble(scanner.nextLine());
        double min_salary = Double.parseDouble(scanner.nextLine());
        double social_scholarship = Math.floor(min_salary * 0.35);
        double excellent_scholarship = Math.floor(average_progress * 25);

        if (average_progress < 4.5) {
            System.out.println("You cannot get a scholarship!");
        }
        if ((average_progress >= 4.50) && (average_progress < 5.50)) {
            if (income < min_salary) {
                System.out.printf("You get a Social scholarship %.0f BGN", social_scholarship);
            } else {
                System.out.println("You cannot get a scholarship!");
            }
        }
        if (average_progress >= 5.50) {
            if (income < min_salary) {
                if (social_scholarship >= excellent_scholarship) {
                    System.out.printf("You get a Social scholarship %.0f BGN", social_scholarship);
                }
                else {
                    System.out.printf("You get a scholarship for excellent results %.0f BGN", excellent_scholarship);
                }
            } else {
                System.out.printf("You get a scholarship for excellent results %.0f BGN", excellent_scholarship);
            }
        }
    }
}

100/100 в judge :))

 

 

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