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