Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

NikolayLiubomirov avatar NikolayLiubomirov 82 Точки

[Homework] C# Basics - Complex Conditions - Задача 13 - Точка във фигурата (Point in the Figure)

Стигнах до "Задача 13 - Точка във фигурата" и като видях, че е със звездичка (*) си казах - до тук съм laugh Но реших все пак да пробвам и я написах от първият път дори без подсказки, та си казах да споделя с вас, понеже използвах вложен цикъл във вложеният цикъл и може би решението ми би било интересно за някой, а и да помогне на някой, който не е успял да я реши.

static void Main()
{
    int h = int.Parse(Console.ReadLine());
    int x = int.Parse(Console.ReadLine());
    int y = int.Parse(Console.ReadLine());

    if ((x >= 0 && x <= h * 3 && y >= 0 && y <= h) || (x >= h && x <= h * 2 && y >= h && y <= h * 4))
    {
        if ((x > 0 && x < h * 3 && y > 0 && y < h) || (x > h && x < h * 2 && y > h && y < h * 4))
            Console.WriteLine("inside");
        else
        {
            if (x > h && x < h * 2 && y == h)
                Console.WriteLine("inside");
            else
                Console.WriteLine("border");
        }
    }
    else
        Console.WriteLine("outside");
}

Изненадващо, Judge също ми даде 100/100 точкиsmiley  

http://prnt.sc/e62rkj

Повечето задачи ги решавам след 3тият път, но тази успях още от първият. Ако имате някакви критики, допълнения или коментари, ще се радвам да ви чуя.

Тагове:
0
Programming Basics
AlucardDracula avatar AlucardDracula 416 Точки

ЕТО моето решение малко е дългичко от твоя.

1
desislava777 avatar desislava777 165 Точки

Много добре си се справил със задачата. Тя е лесна, но много неща се правят и трябва да се внимава да не се допуска грешка. Моят код е по-сложен и по-объркващ от твоя. И аз имам 100 точки от Judge. Ето го моето решение:

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

namespace ConsoleApplication9
{
    class Program
    {
        static void Main(string[] args)
        {
            var h = int.Parse(Console.ReadLine());
            var x = int.Parse(Console.ReadLine());
            var y = int.Parse(Console.ReadLine());
            if (((x > 0) && (x < 3 * h) && (y > 0) && (y < h)) || ((x > h) && (x < 2 * h) && (y > h) && (y < 4 * h)) || ((x > h) && (x < 2 * h) && (y == h)))
            {
                Console.WriteLine("Inside");
            }
            else if (((0 <= x) && (x <= 3 * h) && (y == 0)) || ((x == 0) && (y >= 0) && (y <= h)) || ((x == 3 * h) && (y >= 0) && (y <= h)) || ((x >= 0) && (x <= h) && (y == h))
             || ((x == h) && (y >= h) && (y <= 4 * h)) || ((x == 2 * h) && (y >= h) && (y <= 4 * h)) || ((x >= h) && (x <= 2 * h) && (y == 4 * h))||((x>=2*h)&&(x<=3*h)&&(y==h)))
            {
                Console.WriteLine("border");
            }
            else
            {
                Console.WriteLine("outside");
            }
        }
    }
}

1
Pazzo avatar Pazzo 159 Точки

Здравейте,

ето още един вариант.

Малко по-кратък е, без вложение if-ове, но пък условието към if-a компенсира :)

0
kolioi avatar kolioi 641 Точки

И аз го направих по подобен начин, само че разделих отделните проверки за да стане по-лесно за разбиране. Скобите ги сложих със същата цел.

http://pastebin.com/A14uPhv8

 

0
GapoBG avatar GapoBG 15 Точки

Защо търсиш критика, след като си постигнал отличен резултат :)

0
anna.ilieva avatar anna.ilieva 6 Точки

Здравей, благодаря , че сподели решението си с нас.

Като цяло на мен тази задача ми е много труда , защото не разбирам условието и незнам как да направя тези сравнение с <=>...

Но може ли да те попитам защо използваш числото 3 навсякъде като в условието на задачата няма никъде 3?

Това ми е чудно.
благодаря!

2
NikolayLiubomirov avatar NikolayLiubomirov 82 Точки

Здравей, радвам се, че решението е било полезно. Умножавам h * 3, понеже това е дължината на страната на (единият от двата) правоъгълника, тъй като той е съставен от 3 блокчета, т.е другата страна е просто h. Опитай да схванеш логиката и след това я реши. Общо взето идеята на задачата е да разглеждаш фигурата като 2 правоъгълника и да проверяваш за точката първо в единият и после във вторият правоъгълник, като имаш и едно на ум, че имат обща стена и там не трябва да печата "border", а "inside".

0
kamen971 avatar kamen971 1 Точки

Здравей ! Можеш ли да обясниш стъпка по стъпка кои правоъгълници точно разглеждаш и страните ?

0
skeed avatar skeed 2 Точки

Здравейте , ето едно решение стъпка по стъпка за да бъде по-ясно. :)

int h = int.Parse(Console.ReadLine());
            int x = int.Parse(Console.ReadLine());
            int y = int.Parse(Console.ReadLine());

            bool insideFigure1 = (x > 0) && (x < 3 * h) && (y > 0) && (y < h);
            bool insideFigure2 = (x > h) && (x < 2 * h) && (y > h) && (y < 4 * h);
            bool insideBorder = (x > h) && (x < 2 * h) && (y == h);

            bool onBottomF1 = (0 <= x) && (x <= 3 * h) && (y == 0);
            bool onLeftSideF1 = (x == 0) && (y >= 0) && (y <= h);
            bool onRightSideF1 = (x == 3 * h) && (y >= 0) && (y <= h);
            bool onTopSideF1WithoutInsideBorder = ((x >= 0) && (x <= h) && (y == h) || (x >= 2 * h) && (x <= 3 * h) && (y == h));

            bool onLeftSideF2 = (x == h) && (y >= h) && (y <= 4 * h);
            bool onRightSideF2 = (x == 2 * h) && (y >= h) && (y <= 4 * h);
            bool onTopSideF2 = (x >= h) && (x <= 2 * h) && (y == 4 * h);


            if ((insideFigure1) || (insideFigure2) || (insideBorder))
            {
                Console.WriteLine("Inside");
            }
            else if ((onBottomF1) || (onLeftSideF1) || (onRightSideF1) || (onTopSideF1WithoutInsideBorder) || (onLeftSideF2) || (onRightSideF2) || (onTopSideF2))
            {
                Console.WriteLine("border");
            }
            else
            {
                Console.WriteLine("outside");
            }

0
gondov avatar gondov 3 Точки

Супер си се справил! Моето решение е доста по дълго http://pastebin.com/H0JzJqnP но по този начин се застраховам срещу грешки... Направил съм същото  с тази разлика че вместо в if да използвам формули използвах променливи. Но резултата е един и същи  :)))

1
VelinDim avatar VelinDim 1 Точки

Ето го и моето решение въпреки че стана на шестия път :D.Погледнах подсказките ,но те ме объркаха тотално и реших с моя логика да я реша.

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

namespace Point_in_the_figure
{
    class Program
    {
        static void Main(string[] args)
        {
            int h = int.Parse(Console.ReadLine());
            int x = int.Parse(Console.ReadLine());
            int y = int.Parse(Console.ReadLine());

            bool insideBottom3Square = x > 0 && x < 3 * h && y > 0 && y < h;
            bool insideMiddle3Square = x > h && x < 2*h && y > 0 && y < 4*h;

            bool borderBottom3Square = x >= 0 && x <= 3 * h && y >= 0 && y <= h;
            bool borderMiddle3Square = x >= h && x <= 2 * h && y >= 0 && y <= 4 * h;
            if (insideBottom3Square|| insideMiddle3Square)
            {
                Console.WriteLine("inside");
            }
            else if (borderBottom3Square|| borderMiddle3Square)
            {
                Console.WriteLine("border");
            }
            else
            {
                Console.WriteLine("Outside");
            }
            
        }
    }
}
 

0
BG0DG avatar BG0DG 2 Точки

Да се запиша и с моето решение:

        {
            var h = int.Parse(Console.ReadLine());
            var x = int.Parse(Console.ReadLine());
            var y = int.Parse(Console.ReadLine());

            if (((x > 0 && x < 3 * h) && (y > 0 && y < h)) || ((x > h && x < 2 * h) && (y > 0 && y < 4 * h))) Console.WriteLine("inside");
            else if ((x > h && x < 2 * h) && (y == h)) Console.WriteLine("inside");
            else if (((x < 0 || x > 3 * h) || (y < 0 || y > h)) && ((x < h || x > 2 * h) || (y < 0 || y > 4 * h))) Console.WriteLine("outside");
            else Console.WriteLine("border");

        }

 

0
Iv.St avatar Iv.St 8 Точки

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

namespace Точка_във_фигурата
{
    class Program
    {
        static void Main(string[] args)
        {
            int h = int.Parse(Console.ReadLine());
            int x = int.Parse(Console.ReadLine());
            int y = int.Parse(Console.ReadLine());

            var x1 = 0;
            var y1 = 0;
            var x2 = 3 * h;
            var y2 = h;
            bool insidefigure1 = x > x1 && x < x2 && y > y1 && y < y2;
            bool outsidefigure1 = x < x1 || x > x2 || y < y1 || y > y2;

            var x3 = h;
            var y3 = h;
            var x4 = 2 * h;
            var y4 = 4 * h;
            bool insidefigure2 = x > x3 && x < x4 && y > y3 && y < y4;
            bool outsidefigure2 = x < x3 || x > x4 || y < y3 || y > y4;

            bool insideborder = x > x3 && x < x4 && y == y3;

            if (insidefigure1 || insidefigure2 || insideborder)
            {
                Console.WriteLine("inside");
            }
            else if (outsidefigure1 && outsidefigure2)
            {
                Console.WriteLine("outside");
            }
            else
            {
                Console.WriteLine("border");
            }
        }
    }
}

 

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