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
Programming Basics 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 374 Точки

Здравей,

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

 // Тук проверявам дали точката е вътре или вън.
            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 374 Точки

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

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

Проблемат с последният тест , които гърмеше го реших с 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.