Найти наибольший периметр треугольника, вершины которого принадлежат различным точкам массива - C#

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

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

Всем доброго времени суток!,помогите пожалуйста решить вот такую задачу: "Дан массив А из n точек.Найти наибольший периметр треугольника,вершины которого принадлежат различным точкам массива А,и сами эти точки(точки выводятся в том же порядке,к котором они перечислены при задании массива А)." Заранее огромное спасибо. P.S. Если честно , то я пытался её делать,но мне кажется алгоритм поиска точек не правильный..И я плохо себе представляю ,как реализовать динамический массив. У меня в задаче,как видите, сразу даётся два массива x,y из 6 элементов,а нужно чтобы точки вводились с клавиатуры и их было ровно столько,сколько захочет пользователь.В общем расчитываю только на помощь этого форума.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
       class Program
          {
              static void Main(string[] args)
                  {
                         const int n = 6;
                         int[] x = new int[n] { 2, 11, 5, -2, 5, -4 };
                         int[] y = new int[n] { 7, 13, 3, -5, 9, -1 };
                         int a, b, c,aB,bB,cB;
                         double P,PB;
 
                         aB = 0;
                         cB = 0;
                         bB = 0;
 
                        Console.WriteLine("Координаты точек: ");
                              for (int i = 0; i < n; i++)
                                 {
                                    Console.Write("({0},{1}) ", x[i], y[i]);
                                 }
                                   Console.WriteLine();
 
                          PB = 0;
                       for (a = 0; a < n - 2; a++)
                                for (b = a + 1; b < n - 1; b++)
                                        for (c = b + 1; c < n; c++)
                                                 {
                                                     P = Math.Sqrt((x[b] - x[a])*(x[b] - x[a])  + (y[b] - y[a])*(y[b] - y[a])) 
                                                        + Math.Sqrt((x[c] - x[b])*(x[c] - x[b])+ (y[c] - y[b])* (y[c] - y[b])) 
                                                        + Math.Sqrt((x[c] - x[a])*(x[c] - x[a]) + (y[c] - y[a])*(y[c] - y[a]));
                                                  if (P > PB)
                                                    {
                                                          PB = P;
                                                          aB = a;
                                                          bB = b;
                                                          cB = c;
                                                     }
                                                    }
 
      Console.WriteLine("Площадь большего треугольника равна {0:F4} И сами точки: ({1},{2}),({3},{4}),({5},{6})"
     ,PB, x[aB], y[aB], x[bB], y[bB],x[cB], y[cB]);
 
}
}
}

Решение задачи: «Найти наибольший периметр треугольника, вершины которого принадлежат различным точкам массива»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace N
{
    class Program
    {
        static void Main(string[] args)
        {
            var points = new Point[]
            {
                new Point(1, 2),
                new Point(2, 3),
                new Point(4, 5),
                new Point(8,9), 
                new Point(10,12), 
                new Point(17,-17), 
            };
 
            var tr = Triangle.GenerateTriangle(points);
            Console.WriteLine("Количество треугольников {0}",tr.Length);
 
            Console.WriteLine(tr.Max(q=>q.Perimets()));
            Console.ReadKey();
 
        }
    }
 
    struct Point
    {
        public int X { get; set; }
        public int Y { get; set; }
 
        public Point(int x,int y) : this()
        {
            X = x;
            Y = y;
        }
 
        public override string ToString()
        {
            return string.Format("X={0} Y={1}", X, Y);
        }
    }
 
    class Triangle
    {
        public Point[] points = new Point[3];
        public Triangle(Point p1,Point p2,Point p3)
        {
            points[0] = p1;
            points[1] = p2;
            points[2] = p3;
        }
 
        public double Perimets()
        {
            return Lentgh(points[0], points[1]) + Lentgh(points[1], points[2]) + Lentgh(points[0], points[2]);
        }
 
        public double Lentgh(Point p1, Point p2)
        {
            return Math.Sqrt(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2));
        }
 
       public static Triangle[] GenerateTriangle(Point[]points)
        {
            Random rnd=new Random(DateTime.Now.Millisecond);
 
            List<Triangle> tl=new List<Triangle>();
            for (int i = 0; i < points.Length; i++)
            {
                for (int j = i+1; j < points.Length; j++)
                {
                    for (int k = j+1; k < points.Length; k++)
                    {
                        tl.Add(new Triangle(points[i],points[j],points[k]));
                    }
                }
 
            }
            return tl.ToArray();
        }
    }
 
}

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


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

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

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