| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Алгоритм нахождения всевозможных комбинаций |
| Автор: cosamia 12.11.2012, 12:38 |
| Подскажите может кому попадался алгоритм выдающий всевозможные комбинации для ситуации: Имеем начальный массив с данными (100,0,0,0) шаг = 10 Дальнейшие комбинации будут (90,10,0,0), (80, 10, 10,0) и тд Общая сумма всегда должны быть 100 |
| Автор: Akina 12.11.2012, 14:24 |
| http://algolist.manual.ru/maths/combinat/breakaddend.php |
| Автор: cosamia 12.11.2012, 14:56 | ||
Это не совсем то Там идет речь о разбиении числа N на все возможные комбинации те для 4 это будет комбинация из 4 чисел В таком случае для моего примера, для 100 это будет комбинация из 100 чисел, а я могу использовать только 4 числа |
| Автор: Akina 12.11.2012, 15:21 | ||
| Если тебе удалось разобраться в сути алгоритма, то не должна вызвать сложностей и его модификация для решения твоей задачи. Добавлено через 4 минуты и 49 секунд А уж если совсем туго, то
|
| Автор: cosamia 12.11.2012, 17:43 |
| Акина, мне кажется в этом алгоритме есть ошибка - на каждой итерации сумма всех значений не будет равна 100 Добавлено через 7 минут и 46 секунд Да проверил, данный алгоритм не правильный сумма всех элементов на каждой комбинации не равна 100 |
| Автор: cosamia 12.11.2012, 19:46 |
| 1 sec Добавлено через 3 минуты и 19 секунд Sorry Большое спасибо за помощь! Добавлено через 7 минут и 33 секунды И все-таки выдается множество комбинаций где сумма меньше указанной Вот код int maxVal = 10; for(int i=0; i<=maxVal;i ++) { for(int j=0; j<=maxVal-i; j++) { for(int k=0; k<=maxVal-i-j; k++) { for(int m=0; m<=maxVal-i-j-k; m++) { NSLog(@"Result: %d:%d:%d:%d ", i, j, k, m); } } } } В принципе это решаемо путем отсеивания неверной комбинации сравнивая сумму |
| Автор: disputant 12.11.2012, 20:53 | ||
А цикл по m зачем?!!! m определяется однозначно как 100-i-j-k... |