.NET 4.x Поиск наибольшего вхождения точек в интервал - C#
Формулировка задачи:
Доброго времени суток, есть нестандартная задачка:
Нужно найти интервалы, в которых расположены максимальное и минимальное количество точек.
есть график, даны его точки:
ось x и ось y соответственно
по-оси y значения могут быть от -5 до 5
Сама идея:
Создаем словарь, в котором точки x и y группируются, по-заданным условиям, дальше нам надо найти ИНТЕРВАЛ ПО-ОСИ Y, на котором МАКСИМАЛЬНОЕ количество точек и минимальное количество точек.
интервал ограничен 5 единицами, то есть:
Заранее спасибо, третий день ломаю мозг.
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
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}}); } }
-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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д