Loading...
TeodoraL.Kostadinova avatar TeodoraL.Kostadinova 2 Точки

13. Point in the Figure -задача със звездичка

Здравейте,

цяла вечер я решавам, докарах го до 95 точки, но накрая вече се забатачих в собствената си логика, и просто имам нужда и някой друг да погледне. Знам че проблема е някъде в общата страна на двата правоъгълника, използвах осемнадесет хиляди булеви оператора, за да проверя дали точката попада там, нооо...както казах вече се забатачих.

https://pastebin.com/QvqczffD

Тагове:
0
Programming Basics
fbinnzhivko avatar fbinnzhivko 1586 Точки

using System;

class PointFigure
{
    static void Main()
    {
        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))
        {
            if ((x > 0) && (x < 3 * h) && (y > 0) && (y < h)) { Console.WriteLine("inside"); }
            else if ((x > h) && (x < 2 * h) && (y == h)) { Console.WriteLine("inside"); }
            else { Console.WriteLine("border"); }
        }
        else if ((x >= h) && (x <= 2 * h) && (y >= h) && (y <= 4 * h))
        {
            if ((x > h) && (x < 2 * h) && (y > h) && (y < 4 * h)) { Console.WriteLine("inside"); }
            else if ((x > h) && (x < 2 * h) && (y == h)) { Console.WriteLine("inside"); }
            else { Console.WriteLine("border"); }
        }        
        else { Console.WriteLine("outside"); }

    }
}

Пробвай да реализираш този код на Java.
Пробвай 10 17 20 като входни данни ще разбереш къде ти се чупи логиката.

0
01/04/2017 00:19:24
spzvtbg avatar spzvtbg 581 Точки

https://pastebin.com/Z9x2M8DY така изглежда моето решение на c# но проверките са същите .

първо страна по страна разписах  условието за - "border"

след това в елсиф можеш да направиш проверка за - "outside"

и накрая в елса остава да е -"inside" - дори няма нужда от проверки 

0
aggeorgiev avatar aggeorgiev 326 Точки

Ако искаш да си поправиш собственото решение, първо погледни подробностите за теста, който не минава.

Най-вероятно на границата между двете фигури извеждаш "border" а трябва да бъде "inside", т.е. ако приемем,

че стъпката е 2 линията x2y2-x4y2. Успех.

 

65

0
borkins avatar borkins 47 Точки

За да се улесниш малко, може да подобриш четимостта на кода, като запишеш булевите стойности (true или false) директно в съответните булеви променливи.
Излишно е да се ползва if конструкция, където единствено ще се запише булевия резултат от проверката в променлива.

boolean isInHorizontal = (x > 0 && x < h * 3) && (y > 0 && y < h); // true or false
boolean isInVertical = (x > h && x < h * 2) && (y > 0 && y < h * 4); // true or false

boolean isOutOfHorizontal = (x < 0 || x > h * 3) && y <= h;
boolean isOutOfVertical = ((x < h || x > h * 2) && y > h) || (y < 0 || y > h * 4);

if (isInHorizontal || isInVertical){
    System.out.println("inside");
} else if (isOutOfHorizontal || isOutOfVertical) {
    System.out.println("outside");
} else {
    System.out.println("border");
}

Ето и моя код, който не е много четим, понеже съм прекалил с обединяването на проверките. 

0
01/04/2017 19:50:54
Miroslav_Kisov avatar Miroslav_Kisov 60 Точки

Решение: https://pastebin.com/ZdbNStMz

0
janco76 avatar janco76 1 Точки

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());

            int x1 = 0;
            int y1 = 0;
            int x2 = 3 * h;
            int y2 = h;

            int x3 = h;
            int y3 = h;
            int x4 = 2 * h;
            int y4 = 4 * h;

            bool in_firsFigure = (x > x1) && (x < x2) && (y > y1) && (y < y2);

            bool in_secondFigure = (x > x3) && (x < x4) && (y > y3) && (y < y4);

            bool border = ((x == x1 && y >= y1 && y <= y2) || (x == x2 && y >= y1 && y <= y2)
                        || (x == x3 && y >= y2 && y <= y4) || (x == x4 && y >= y2 && y <= y4)) 
                        || ((y==y1 && x>=x1 && x<=x2) || (y == y2 && x >= x4 && x <= x2) 
                        || (y == y3 && x >= x1 && x <= x3) || (y == y4 && x >= x3 && x <= x4));

            bool obchta_strana = (x >= x3 && x <= x4 && y == y2);

            if (in_firsFigure || in_secondFigure || obchta_strana && !border)

                Console.WriteLine("inside");

            else if (border)

                Console.WriteLine("Border");
                   
            
            else if (!border && !in_firsFigure && !in_secondFigure && !obchta_strana)

                Console.WriteLine("outside");
           
        }
    }
}

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