Софтуерно Инженерство
Loading...
Vinetu avatar Vinetu 1 Точки

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

 

Тагове:
0
Основи на програмирането 02/08/2016 10:38:57
Vinetu avatar Vinetu 1 Точки

Много ви благодаря за бързите и описателни отговори.

Страхотни сте :)

0
FireHead avatar FireHead 44 Точки

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

0
FireHead avatar FireHead 44 Точки

Така е още по-елегантно...

0
Bullsized avatar Bullsized 153 Точки

твоето решение дава 80/100, пак има нещо, което куца...
аз стигнах до 90/100 както Алекс0101 по-горе, но имам друга грешка от твоето решение и не мога да разбера какво аджеба не му харесва на Джъджа...
кво ли не пробвах - едно да е по-голямо от две, обратното, с равнота, едно да е равно на две...
ако някой се сети някакво друго решение да удари едно рамо!

0
fbinnzhivko avatar fbinnzhivko 1574 Точки

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

        }
    }
}

0