Можно ли разделить квадрат на 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();
}
}
}