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

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

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

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

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

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Drawing;
  7.  
  8.  
  9. namespace ConsoleApplication1
  10. {
  11.     class Program
  12.     {
  13.  
  14.       static bool IsCandlesInOneHalf(PointF center, PointF[] candles)
  15.         {
  16.  
  17.  
  18.             for (int i = 0; i < candles.Length; i++)
  19.             {
  20.                 PointF firstVector = PointF.Subtract(candles[i], new SizeF(center));
  21.                 int previousSign = 0;
  22.                 var isInOneHalf = true;
  23.  
  24.                 for (int j = 0; j < candles.Length; j++)
  25.                 {
  26.                     if (i != j)
  27.                     {
  28.                         PointF secondVector = PointF.Subtract(candles[j], new SizeF(center));
  29.                         int sign = Math.Sign(firstVector.X * secondVector.Y - secondVector.X * firstVector.Y);
  30.                         if (previousSign == 0)
  31.                         {
  32.                             previousSign = sign;
  33.                         }
  34.                         else if (previousSign != sign)
  35.                         {
  36.                             isInOneHalf = false;
  37.                             break;
  38.                         }
  39.                     }
  40.                 }
  41.  
  42.                 if (isInOneHalf)
  43.                 {
  44.                     return true;
  45.  
  46.                 }
  47.             }
  48.  
  49.             return false;
  50.         }
  51.  
  52.  
  53.  
  54.  
  55.         static void Main(string[] args)
  56.         {
  57.  
  58.  
  59.             int n;
  60.             Console.WriteLine("Сколько будет свечей?");
  61.             n = Convert.ToInt32(Console.ReadLine());
  62.             int[] dotX = new int[n];
  63.             int[] dotY = new int[n];
  64.  
  65.             Console.WriteLine("Введите координаты свечей");
  66.             for (int i = 0; i < n; i++)
  67.             {
  68.                 Console.Write("X{0} = ", i + 1);
  69.                 dotX[i] = Convert.ToInt32(Console.ReadLine());
  70.  
  71.                 Console.Write("Y{0} = ", i + 1);
  72.                 dotY[i] = Convert.ToInt32(Console.ReadLine());
  73.             }
  74.  
  75.  
  76.             var candles = Enumerable.Range(0, n).Select(i => new PointF(dotX[i], dotY[i])).ToArray();
  77.             bool possible = IsCandlesInOneHalf(PointF.Empty, candles);
  78.             if (possible == true)
  79.             {
  80.                 Console.WriteLine("Такой разрез возможен");
  81.             }
  82.             else {
  83.                 Console.WriteLine("Nope");
  84.             }
  85.             Console.ReadKey();
  86.         }
  87.     }
  88. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

14   голосов , оценка 4.214 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы