Можно ли разделить квадрат на 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();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д