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

 

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

Здравей!

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

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

 

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

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

0
03/06/2016 23:38:18
gtsonkov avatar gtsonkov 59 Точки

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

https://pastebin.com/VQCNEut7

0
Bullsized avatar Bullsized 153 Точки

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

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