Проблем със задача On Time for Exam - C#
Здравейте!
Judge ми дава 87/100 и си нямам никаква идея къде ми е грешката, мъча я от 3 дни задачата все около 80 тъпча. Ще се радвам на малко помощ.
Здравейте!
Judge ми дава 87/100 и си нямам никаква идея къде ми е грешката, мъча я от 3 дни задачата все около 80 тъпча. Ще се радвам на малко помощ.
Здравей,
За съжаление и моята препоръка e да преработиш програмата - според мен, ще бъде в твой интерес...
Предлагам ти решение на C# с команди от PB курса:
Бих ти обърнал внимание за следните "хитрини":
==============================================
int examH = int.Parse(Console.ReadLine());
int examMin = int.Parse(Console.ReadLine());
int arrivalH = int.Parse(Console.ReadLine());
int arrivalMin = int.Parse(Console.ReadLine());
int examHtransf = examH * 60; // обърни часовете и минутите САМО в минути, спестява труд и код
int examMinTransf = examHtransf + examMin;
int arrivalHtransf = arrivalH * 60; // обърни часовете и минутите САМО в минути, спестява труд и код
int arrivalMinTransf = arrivalHtransf + arrivalMin;
int difference = Math.Abs(arrivalMinTransf - examMinTransf);
int diffH = difference / 60;
int diffMin = difference % 60;
===============================================
Този вариант за формат на минутите елиминира допълнително проверки като тези:
===========================
else if (minutesDifference < 10)
Console.WriteLine($"{hoursDifference - 1}:0{minutesDifference} hours after the start");
===========================
===========================
else
{
Console.WriteLine("Early");
Console.WriteLine($"{diffH}:{diffMin:00} hours before the start");
}
============================
Поздрави,
Иван
Здравей, ще качиш ли и условието на задачата :-)
Ето го условието :)
Студент трябва да отиде на изпит в определен час (например в 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”.
Според мен, малко си се объркала със сметките на часове -минути, най-добре е да ги изчислиш в началото и да работиш с цялото време, така ще е много по-малко код
Това е решение на Java, но ще успееш да се ориентираш :-)
https://pastebin.com/yWkrwtVF
Такива проблеми свързани с време/дати се решават със TimeSpan/DateTime според case-а. И рано или късно ще се сблъскате с тях. Понеже това е задача от бейсик(?) най-вероятно искат да упражните условните конструкции. Преди ги показваха тези типове данни за работа с времена/дати, но не пречи сама да се поразровиш как се ползват, защото никой реално няма да седне и да изпише толкова много проверки за основни операции с време. Другото, което мога да те посъветвам е да се опиташ да намалиш бройката на проверките до колкото е възможно (опитай се дали можеш да премахнеш ненужни такива).
Ето едно примерно решение как би трябвало да се реши задачата:
namespace SandBox
{
using System;
using System.Globalization;
public class StartUp
{
public static void Main()
{
const string FORMAT = @"h\:mm";
string examBeginningTimeAsString = $"{Console.ReadLine()}:{Console.ReadLine()}";
string studentArrivalTimeAsString = $"{Console.ReadLine()}:{Console.ReadLine()}";
TimeSpan examBeginningTime = TimeSpan.ParseExact(examBeginningTimeAsString, FORMAT, CultureInfo.InvariantCulture);
TimeSpan studentArrivalTime = TimeSpan.ParseExact(studentArrivalTimeAsString, FORMAT, CultureInfo.InvariantCulture);
if (studentArrivalTime > examBeginningTime)
{
Console.WriteLine("Late");
var diff = studentArrivalTime - examBeginningTime;
if (diff < TimeSpan.FromMinutes(60))
Console.WriteLine($"{diff.Minutes} minutes after the start");
else
Console.WriteLine($"{diff.ToString(FORMAT)} hours after the start");
}
else
{
var diff = examBeginningTime - studentArrivalTime;
string output = diff <= TimeSpan.FromMinutes(30)? "On time" : "Early";
Console.WriteLine(output);
if (diff < TimeSpan.FromMinutes(60))
Console.WriteLine($"{diff.Minutes} minutes before the start");
else
Console.WriteLine($"{diff.ToString(FORMAT)} hours before the start");
}
}
}
}
Благодаря на всички за бързите отговори, ще я преработя из основи.
Здравейте, не знам къде бъркам.. дава ми 93 от 100.. Ето кода https://pastebin.com/Q0nMXpfA
Погледна ли DETAILS ?
Погледнах..на input 10/00/10/00 не ми изкарваше output. Мерси, оправих кода. https://pastebin.com/wcj25KSt