Софтуерно Инженерство
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
dilqna9 avatar dilqna9 44 Точки
Best Answer

Не правиш проверка за числата first и second. Първото /first/ въведено число може да е по- малко или по- голямо от второто /second/, т.е. ти трябва такава проверка:

if (first<second)
{
    if (first <= point && point <= second)
    {
                Console.WriteLine("in");
                Console.WriteLine("{0}", nearEnd);
     }
     else
     {
                Console.WriteLine("out");
                Console.WriteLine("{0}", nearEnd);
      }
 }


 else if (first>second)
 {
    if (first >= point && point >= second)
    {
                Console.WriteLine("in");
                Console.WriteLine("{0}", nearEnd);
     }
     else
     {
                Console.WriteLine("out");
                Console.WriteLine("{0}", nearEnd);
      }
 }

2
02/08/2016 11:35:15
Alex0101 avatar Alex0101 375 Точки

Здравей,

На пръв поглед поправих условието за проверка, дали точката се намира в рамките но отсечката, или не.

 // Тук проверявам дали точката е вътре или вън.
            if (first <= point && point <= second)
            {
                Console.WriteLine("in");
                Console.WriteLine("{0}", nearEnd);
            }
            else
            {
                Console.WriteLine("out");
                Console.WriteLine("{0}", nearEnd);
            }

С тези променени условие даде 90 точки. 

Сага търся и другия проблем

0
Alex0101 avatar Alex0101 375 Точки

Здравей, колежката е абсолютно права. 

Не съобразих, че в условието няма никъде споменато, че числата ще бъдат подадени последователно.

Проблемат с последният тест , които гърмеше го реших с 3-4 реда код.

По презумция се четеш числата, както си ги четеш и сега, но в началото правиш една проверка дали второто подадено не е по-малко от първото.  Ако е по-малко, проста разменят стойностите на first и second.

if (first > second)
            {
                int temp = second;
                second = first;
                first = temp;
            }

Надявам се да сме били от полза.

Успех!

1
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