Софтуерно Инженерство
Loading...
+ Нов въпрос
rado84 avatar rado84 1 Точки

Точка върху отсечка

От 11:30 насам решавам всевъзможни задачи и точно тази ми се опъна. Сигурно вече ми трябва почивка, защото "забих" и не мога да се сетя какво изпускам, та не ще да изкара съответните изходи in & out, но ми се ще първо да приключа с тази задача. Отделно пък си нямам идея как да изкомандоря конзолата да покаже най-близкия край. Та, жокер "помощ от публиката", вие сте на ход.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PointOnSegment
{
    class Program
    {
        static void Main(string[] args)
        {
            //variables
            int dot1 = int.Parse(Console.ReadLine());
            int dot2 = int.Parse(Console.ReadLine());
            int point = int.Parse(Console.ReadLine());

            //locations
            if (point > dot1 && point < dot2)
            {
                Console.WriteLine("in");
            }

            if (point < dot1 && point < dot2)
            {
                Console.WriteLine("out");
            }

            if (point > dot1 && point > dot2)
            {
                Console.WriteLine("out");
            }
        }
    }
}

 

hwfbcisod avatar hwfbcisod 80 Точки

Директно ще ти дам решението ми, тъй като в момента нямам време да ти дам по-подробен отговор и интерпретация на кода.При всички случаи е имало по-оптимален вариант, но тогава съм се сетил за този: http://pastebin.com/6ZuDhiR7

0
denka avatar denka 52 Точки

Здравей,

Първото условие ти е непълно:

if (point > dot1 && point < dot2) { Console.WriteLine("in"); } Никой не е казал, че dot1 < dot2. Виж последния примерен вход.

 

Поздрави, Дени

0
rado84 avatar rado84 1 Точки

Е как да не е по-малко (не се заяждам, а питам)? dot1 е лявата част на отсечката, dot2 - дясната. И в трите случая dot1 < dot2 - минус 2 е по-малко от плюс 1.

Според теб какво още трябва да добавя в условието?

А от кода на hwfbcisod разбрах какво се има предвид под "най-близката точка", така че остава да се разбере защо не иска да изписва in и out.

-1
hwfbcisod avatar hwfbcisod 80 Точки

Помисли за dot1 > point && point > dot2. Не е задължително винаги dot2 > dot1. Ами, ако dot1 == dot2? Ами, ако point == dot1 или point == dot2?

 

0
03/06/2016 21:30:42
IskrenPenev avatar IskrenPenev 177 Точки
            int a = int.Parse(Console.ReadLine());
            int b = int.Parse(Console.ReadLine());
            int x = int.Parse(Console.ReadLine());
            if ((x >= a && x <= b) || (x <= a && x >=b))
            {
                Console.WriteLine("in");
            }
            else
            {
                Console.WriteLine("out");
            }
            Console.WriteLine(Math.Min(Math.Abs(x-a), Math.Abs(x - b)));

На четвъртия ред е необходимата проверка, дали точката е в дадената отсечка (независимо кое е по - голямо, a или b)

Можеш също така да прочетеш първо числата, и като dot1 да зададеш Math.Min(a,b), a като dot2 = Math.Max(a,b); По този начин нямаш нужда от двете проверки с "||" а само от 1 (point >= dot1 && point <= dot2)

0
03/06/2016 21:34:32
KrasimirPetkov avatar KrasimirPetkov 331 Точки

Здравей!

Както казаха в постовете по-рано, в условието никъде не е зададено, че задължително т1 < т2.

В този случай, изключително полезни са вградените математически функции Math.Min(), Math.Max() и Math.Abs(), благодарение на които можеш лесно да оправиш последователността на точките и разстоянието между тях.

 

Ето решение, което включва използването им: http://pastebin.com/gJHsKtty

Успех със задачата!

0
03/06/2016 23:38:18
YavorSpassov avatar YavorSpassov 133 Точки

Моето решение е на 90%, но вече се уморих да гледам какво съм пропуснал: http://pastebin.com/x8Zm4r1d

0
gtsonkov avatar gtsonkov 52 Точки

Аз мисля, че това е решението Judge го приема със 100/100. Със сигурност има и по лесен вариант, но за съжаление съм още зелен в C#... 

https://pastebin.com/VQCNEut7

0
Bullsized avatar Bullsized 153 Точки

от къде е тази задача? линк към джъдж? линк към лекция? името на английски? поясни, за да можем да ти помогнем!

0