Софтуерно Инженерство
Loading...
+ Нов въпрос
dido1092 avatar dido1092 34 Точки

09. On Time for the Exam Nested Conditional Statements - Exercise

в Judge получавам само 81/100, омотах се от проверки и явно пропускам някои варианти, ще съм благодарен  за помощ, също така и за по-съкратен вариант и лесен за разбиране!

моят код: https://pastebin.com/cauHEXYM

judge: https://judge.softuni.bg/Contests/Compete/Index/1162#8

 

9.Навреме за изпит

Студент трябва да отиде на изпит в определен час (например в 9:30 часа). Той идва в изпитната зала в даден час на пристигане (например 9:40). Счита се, че студентът е дошъл навреме, ако е пристигнал в часа на изпита или до половин час преди това. Ако е пристигнал по-рано повече от 30 минути, той е подранил. Ако е дошъл след часа на изпита, той е закъснял. Напишете програма, която прочита време на изпит и време на пристигане и отпечатва дали студентът е дошъл навреме, дали е подранил или е закъснял и с колко часа или минути е подранил или закъснял.

Вход

От конзолата се четат 4 цели числа (по едно на ред), въведени от потребителя:

  • Първият ред съдържа час на изпита – цяло число от 0 до 23.
  • Вторият ред съдържа минута на изпита – цяло число от 0 до 59.
  • Третият ред съдържа час на пристигане – цяло число от 0 до 23.
  • Четвъртият ред съдържа минута на пристигане – цяло число от 0 до 59.

Изход

На първият ред отпечатайте:

  • Late”, ако студентът пристига по-късно от часа на изпита.
  • On time”, ако студентът пристига точно в часа на изпита или до 30 минути по-рано.
  • Early”, ако студентът пристига повече от 30 минути преди часа на изпита.

Ако студентът пристига с поне минута разлика от часа на изпита, отпечатайте на следващия ред:

  • “mm minutes before the start” за идване по-рано с по-малко от час.
  • “hh:mm hours before the start” за подраняване с 1 час или повече. Минутите винаги печатайте с 2 цифри, например “1:05”.
  •  “mm minutes after the start” за закъснение под час.
  • “hh:mm hours after the start” за закъснение от 1 час или повече. Минутите винаги печатайте с 2 цифри, например “1:03”.

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

Вход

Изход

 

Вход

Изход

 

Вход

Изход

9

30

9

50

Late

20 minutes after the start

9

00

10

30

Late

1:30 hours after the start

10

00

10

00

On time

9

00

8

30

On time

30 minutes before the start

 

14

00

13

55

On time

5 minutes before the start

11

30

10

55

Early

35 minutes before the start

16

00

15

00

Early

1:00 hours before the start

 

11

30

8

12

Early

3:18 hours before the start

11

30

12

29

Late

59 minutes after the start

Тагове:
doani avatar doani 21 Точки

Здравей, първо обръщаме всичко в минути  - 

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

namespace _9.On_Time_For_The_Exam
{
    class Program
    {
        static void Main(string[] args)
        {
            int examHour = int.Parse(Console.ReadLine());
            int examMinutes = int.Parse(Console.ReadLine());
            int examMyHour = int.Parse(Console.ReadLine());
            int examMyMinutes = int.Parse(Console.ReadLine());

            double examTimeAllInMinutes = (examHour * 60.0) + examMinutes;

            double examMyTimeAllInMinutes = (examMyHour * 60.0) + examMyMinutes;

            double timeDifference = 0;
            string time = "";

            if (examTimeAllInMinutes == examMyTimeAllInMinutes)
            {
                time = "On time";
                Console.WriteLine(time);
            }

            else if  (examTimeAllInMinutes > examMyTimeAllInMinutes)
            {
                if ((examTimeAllInMinutes - examMyTimeAllInMinutes) <= 30)
                {
                    time = "On time";
                    timeDifference = examTimeAllInMinutes - examMyTimeAllInMinutes;

                    Console.WriteLine(time);
                    Console.WriteLine($"{timeDifference} minutes before the start");
                }
                else if (((examTimeAllInMinutes - examMyTimeAllInMinutes) > 30) && (examTimeAllInMinutes - examMyTimeAllInMinutes < 60))
                {

                    time = "Early";

                     timeDifference = examTimeAllInMinutes - examMyTimeAllInMinutes;

                        Console.WriteLine(time);
                        Console.WriteLine($"{timeDifference} minutes before the start");
                }

                 else if (examTimeAllInMinutes - examMyTimeAllInMinutes >= 60)
                 {
                    time = "Early";
                    timeDifference = examTimeAllInMinutes - examMyTimeAllInMinutes;
                        double differenceHour = Math.Floor(timeDifference / 60);
                        double differenceMinutes = timeDifference % 60;
                    if (differenceMinutes < 10)
                    {
                        Console.WriteLine(time);
                        Console.WriteLine($"{differenceHour}:0{differenceMinutes} hours before the start");
                    }
                    else
                    {
                        Console.WriteLine(time);
                        Console.WriteLine($"{differenceHour}:{differenceMinutes} hours before the start");
                    }
                 }
                
            }

            else if (examMyTimeAllInMinutes > examTimeAllInMinutes)
            {
                time = "Late";

                if (examMyTimeAllInMinutes - examTimeAllInMinutes < 60)
                {
                    timeDifference = examMyTimeAllInMinutes - examTimeAllInMinutes;

                    Console.WriteLine(time);
                    Console.WriteLine($"{timeDifference} minutes after the start");
                }
                else if (examMyTimeAllInMinutes - examTimeAllInMinutes >= 60)
                {
                    timeDifference = examMyTimeAllInMinutes - examTimeAllInMinutes;
                    double differenceHour = Math.Floor(timeDifference / 60);
                    double differenceMinutes = timeDifference % 60;

                    if(differenceMinutes < 10)
                    {
                        Console.WriteLine(time);
                        Console.WriteLine($"{differenceHour}:0{differenceMinutes} hours after the start");
                    }
                    else
                    {
                        Console.WriteLine(time);
                        Console.WriteLine($"{differenceHour}:{differenceMinutes} hours after the start");
                    }
                    
                }
            }
        }
    }
}
 

1
RuNNeR4142 avatar RuNNeR4142 391 Точки

Лесна за проследяване логика с по-ясни проверки:
 

public class E01OnTimeForTheExam {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int hourExam = Integer.parseInt(scanner.nextLine());
        int minExam = Integer.parseInt(scanner.nextLine());
        int hourArv = Integer.parseInt(scanner.nextLine());
        int minArv = Integer.parseInt(scanner.nextLine());
        String time;
        int minAllExam = (hourExam * 60) + minExam;
        int minAllArv = (hourArv * 60) + minArv;

        if (hourExam < hourArv) {
            time = "Late";
        } else if (hourExam == hourArv && minExam < minArv) {
            time = "Late";
        } else if ((minAllExam - minAllArv) <= 30) {
            time = "On time";
        } else {
            time = "Early";
        }
        System.out.println(time);

        if (minAllArv < minAllExam) {
            int minAllBefore = minAllExam - minAllArv;

            if (minAllBefore < 60) {
                System.out.printf("%d minutes before the start", minAllBefore);
            } else {
                if (minAllBefore % 60 < 10) {
                    System.out.printf("%d:0%d hours before the start", minAllBefore / 60, minAllBefore % 60);
                } else {
                    System.out.printf("%d:%d hours before the start", minAllBefore / 60, minAllBefore % 60);
                }
            }
        }
        if (minAllArv > minAllExam) {
            int minAllAfter = minAllArv - minAllExam;

            if (minAllAfter < 60) {
                System.out.printf("%d minutes after the start", minAllAfter);
            } else {
                if (minAllAfter % 60 < 10) {
                    System.out.printf("%d:0%d hours after the start", minAllAfter / 60, minAllAfter % 60);
                } else {
                    System.out.printf("%d:%d hours after the start", minAllAfter / 60, minAllAfter % 60);
                }
            }
        }
    }
}

 

1
dido1092 avatar dido1092 34 Точки

Нали е на java? Защото ми дава "Compile time error!"

1
dido1092 avatar dido1092 34 Точки

Благодаря за решенията!

0