Point on Segment - не мога да разбера къде ми е грешката
Здравейте, опитвам се да реша задача "4. Точка върху отсечка" от "Подготовка за изпит по Програмиране за начинаещи", условието може да видите тук.
Когато я тествам с "Примерен вход и изход" дадени в условието, всичко си работи перфектно.
Но когато направя тест в judge, ми дава само 70%, като за съжаление не ми показва къде са ми грешките.
Ако някой може да ми обясни къде греша, ще съм му много благодарен.
Ето го и кода ми:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Point_on_Segment
{
class Program
{
static void Main(string[] args)
{
int first = int.Parse(Console.ReadLine());
int second = int.Parse(Console.ReadLine());
int point = int.Parse(Console.ReadLine());
// Тук намирам дистанцията до най-близката точка.
int distance1 = Math.Abs(first - point);
int distance2 = Math.Abs(second - point);
int nearEnd = 0;
if (distance1 <= distance2)
{
nearEnd = distance1;
}
else
{
nearEnd = distance2;
}
// Тук проверявам дали точката е вътре или вън.
if (first >= point && point >= second)
{
Console.WriteLine("in");
Console.WriteLine("{0}", nearEnd);
}
else
{
Console.WriteLine("out");
Console.WriteLine("{0}", nearEnd);
}
}
}
}
int x1 = int.Parse(Console.ReadLine());
int x2 = int.Parse(Console.ReadLine());
int x = int.Parse(Console.ReadLine());
int dist1 = Math.Abs(x1 - x);
int dist2 = Math.Abs(x2 - x);
int distance = Math.Min(dist1, dist2);
if (x > Math.Min(x1, x2) && x < Math.Max(x1, x2))
{ Console.WriteLine("in"); Console.WriteLine(distance); }
else { Console.WriteLine("out"); Console.WriteLine(distance); }
Така е още по-елегантно...
твоето решение дава 80/100, пак има нещо, което куца...
аз стигнах до 90/100 както Алекс0101 по-горе, но имам друга грешка от твоето решение и не мога да разбера какво аджеба не му харесва на Джъджа...
кво ли не пробвах - едно да е по-голямо от две, обратното, с равнота, едно да е равно на две...
ако някой се сети някакво друго решение да удари едно рамо!
100/100 => Най - краткото решение
using System;
class PointOnSegment
{
static void Main()
{
var first = double.Parse(Console.ReadLine());
var second = double.Parse(Console.ReadLine());
var point = double.Parse(Console.ReadLine());
var left = Math.Min(first, second);
var right = Math.Max(first, second);
var leftDistance = Math.Abs(point - left);
var rightDistance = Math.Abs(point - right);
var distance = Math.Min(leftDistance, rightDistance);
if ((point >= left) && (point <= right))
{
Console.WriteLine("in\n{0}", distance);
}
else
{
Console.WriteLine("out\n{0}", distance);
}
}
}
Решение с for цикъл: https://pastebin.com/HuY6WZv7