Можно ли разделить квадрат на 2 равные части чтобы все точки находящиеся на нем были по одну сторону квадрата? - C#

Узнай цену своей работы

Формулировка задачи:

На квадратном торте N свечей. Можно ли одним прямолинейным разрезом разделить его на две равные по площади части, одна из которых не содержала бы ни одной свечи? Свечи будем считать точками, у которых известны их целочисленные координаты Х[1], Y[1]; ...; Х[N], Y[N]. Нид хелп.

Решение задачи: «Можно ли разделить квадрат на 2 равные части чтобы все точки находящиеся на нем были по одну сторону квадрата?»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
 
 
namespace ConsoleApplication1
{
    class Program
    {
 
      static bool IsCandlesInOneHalf(PointF center, PointF[] candles)
        {
 
 
            for (int i = 0; i < candles.Length; i++)
            {
                PointF firstVector = PointF.Subtract(candles[i], new SizeF(center));
                int previousSign = 0;
                var isInOneHalf = true;
 
                for (int j = 0; j < candles.Length; j++)
                {
                    if (i != j)
                    {
                        PointF secondVector = PointF.Subtract(candles[j], new SizeF(center));
                        int sign = Math.Sign(firstVector.X * secondVector.Y - secondVector.X * firstVector.Y);
                        if (previousSign == 0)
                        {
                            previousSign = sign;
                        }
                        else if (previousSign != sign)
                        {
                            isInOneHalf = false;
                            break;
                        }
                    }
                }
 
                if (isInOneHalf)
                {
                    return true;
 
                }
            }
 
            return false;
        }
 
 
 
 
        static void Main(string[] args)
        {
 
 
            int n;
            Console.WriteLine("Сколько будет свечей?");
            n = Convert.ToInt32(Console.ReadLine());
            int[] dotX = new int[n];
            int[] dotY = new int[n];
 
            Console.WriteLine("Введите координаты свечей");
            for (int i = 0; i < n; i++)
            {
                Console.Write("X{0} = ", i + 1);
                dotX[i] = Convert.ToInt32(Console.ReadLine());
 
                Console.Write("Y{0} = ", i + 1);
                dotY[i] = Convert.ToInt32(Console.ReadLine());
            }
 
 
            var candles = Enumerable.Range(0, n).Select(i => new PointF(dotX[i], dotY[i])).ToArray();
            bool possible = IsCandlesInOneHalf(PointF.Empty, candles);
            if (possible == true)
            {
                Console.WriteLine("Такой разрез возможен");
            }
            else {
                Console.WriteLine("Nope");
            }
            Console.ReadKey();
        }
    }
}

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы