Найти близкие по значению числа

Mat

Client
Регистрация
23.05.2019
Сообщения
19
Благодарностей
1
Баллы
3
Здравствуйте, уважаемое сообщество.
Есть такие числа:
558
559
561
564
569
598
613
613
634
638
640
690
690
700
По порядку они в примере только для наглядности. Чисел всегда около 20ти. Стоит задача найти 4 наиболее близких числа. В примере это первые четыре числа. Можете подсказать какое-нибудь решение? Сейчас делаю на кубиках, но, по-моему это будет неверно.
2 числа найти легко, а вот на 3ем я уже застопорился.
 
Последнее редактирование:

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
C#:
var list = project.Lists["list"];// список проекта с числами

var nums = list.Select(x=>int.Parse(x)).Distinct().OrderBy(x=>x).ToList();
var array = new int[4];
int dif = nums.Last();
for(int i = 0; i < nums.Count; i++){
    try{
        var temp = nums.GetRange(i, 4);
        int _dif = temp.Last() - temp.First();
        if(_dif < dif){
            array = temp.ToArray();
            dif = _dif;
        }
    }
    catch{
        break;
    }
}
return string.Join(",", array);
1671269510816.png
1671269485540.png
 

Mat

Client
Регистрация
23.05.2019
Сообщения
19
Благодарностей
1
Баллы
3
Спасибо, работает. А если числа одинаковые (это идеальный вариант)? Можно их вывести? Сейчас в списке
558
559
561
564
569
598
613
613
634
638
640
690
690
690
691
Выводит лучший вариант 558,559,561,564, а нужно 690,690,690,691
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
  • Спасибо
Реакции: Ilshakin, Sergodjan и Mat

Mat

Client
Регистрация
23.05.2019
Сообщения
19
Благодарностей
1
Баллы
3
  • Спасибо
Реакции: Alexmd

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)