.NET 4.x Поиск наибольшего вхождения точек в интервал - C#

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

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

Доброго времени суток, есть нестандартная задачка: Нужно найти интервалы, в которых расположены максимальное и минимальное количество точек. есть график, даны его точки:
9	-1,55
25	3,8
39	4,6
113	-0,89
133	-0,94
156	4,03
165	3,68
219	-1,81
242	3,54
278	2,32
366	3,2
404	-3,49
489	0,11
535	0,2
556	2,3
573	-2,15
579	3,28
613	-3,61
717	1,9
718	-1,12
740	-0,4
772	3,12
839	3,24
870	0,09
907	-4,2
915	-2,52
918	2,24
924	-0,11
1086	3,11
1101	3,36
1185	-1,57
1196	3,22
1223	-2,7
1236	-4,09
1262	2,99
1333	-1,96
1339	-2,94
1349	-2,91
1366	-2,34
1386	4,81
1441	0,16
1536	2,71
1604	-3,12
1630	-0,15
1649	-4,45
1825	2,54
1855	-2,68
1856	-1,08
1943	-1,26
2017	-2,52
2049	3,95
2057	-2
2081	1,33
2109	-1,27
2133	3,29
2159	1,31
2162	-4,21
2186	3,9
2212	-0,31
2256	0,66
2295	-3,68
2298	2,97
2352	-4,49
2393	-0,12
2409	-3,03
2431	4,62
2438	0,1
2446	3,23
2456	-1,66
2504	-3,57
2557	2,32
2604	2,42
2703	-3,22
2705	-0,58
2736	2,81
2749	3,21
2764	4,51
2771	-2,22
2959	2,22
3023	2,71
3099	-0,03
3101	-3,34
3107	-3,27
3113	-0,45
3125	-2,03
3130	-1,68
3200	0,77
ось x и ось y соответственно по-оси y значения могут быть от -5 до 5 Сама идея:
Dictionary<int,Dictionary<int,double>> dic = new Dictionary<int, Dictionary<int, double>>();
            int i = 0;
            foreach (var line in jt)
            {
                int x = line["x"].Value<int>();
                var y = line["y"].Value<double>();
                if (dic.Count>0 && dic[i].Count >= 10&&(x- dic[i].Keys.Last()>24))
                {
                    i += 1;
                }
                if (dic.ContainsKey(i))
                {
                    dic[i].Add(x, y);
                }
                else
                {
                    dic.Add(i,new Dictionary<int, double>{{x,y}});
                }
            }
Создаем словарь, в котором точки x и y группируются, по-заданным условиям, дальше нам надо найти ИНТЕРВАЛ ПО-ОСИ Y, на котором МАКСИМАЛЬНОЕ количество точек и минимальное количество точек. интервал ограничен 5 единицами, то есть:
-5<y<0; -4<y<1; -3<y<2; -2<y<3; -1<y<4; 0<y<5;
Заранее спасибо, третий день ломаю мозг.

Решение задачи: «.NET 4.x Поиск наибольшего вхождения точек в интервал»

textual
Листинг программы
            var res = points.GroupBy(p => Math.Truncate(p.Y) + Math.Abs(p.Y)%1 < 0.5 ? 0 : 1).ToList();
            var inters = new int[res.Count - 5];
            for (int i = 0; i < inters.Length; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    inters[i] = res[i + j].Count();
                }
            }
 
            var max = inters.Max();
            var index = Array.IndexOf(inters, max);
            Console.WriteLine("Победил интервал [{0}..{1}] с количеством цифр в интервале равному {2}", index - 5, index, max);

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


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

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

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