HelloIt'sMe_M Ответов: 3

Все возможные числа в C#


Учитывая числа ... например, {1,2,3,4}
Мне нужен способ обобщить все возможные комбинации и подмножества чисел.
Мне нужно иметь все подмножества (все подмножества 1 элемента, все подмножества 2 элементов, все подмножества n элементов) и из каждого подмножества все возможные перестановки.
Понятия не имею
Все комбинации!
Есть ли быстрый способ?
Например результат должен быть:
1
1 2
1 3
1 4
1 2 3
1 2 4
1 3 4
1 2 3 4
2
2 3
2 4
2 3 4
3
3 4
4


Что я уже пробовал:

Это мой код

for (int i = 0; i < (2^4)-1; i++)
            {
                for (int j = 0; j < i+1; j++)
                {
                    for (int k = j; k < i; k++)
                    {
                        Console.Write(k+1);
                    }
                    Console.WriteLine();
                }
            }


this my output 
1
1 2
2
1 2 3
2 3
3
1 2 3 4
2 3 4
3 4
4




Примечание : это мой вопрос в Stackoverflow, а не решение, потому что они думают, что это дубликат

F-ES Sitecore

Это дубликат, это один из самых часто задаваемых домашних вопросов, я уверен, что вы можете найти ответ, если загуглите. Просто помните, что все остальные в классе, кто жульничает, вероятно, будут передавать тот же код, что и вы.

HelloIt'sMe_M

нет это проблема не домашнее задание
я погуглил его, но не нашел никакого полезного решения

F-ES Sitecore

Это ни здесь, ни там :) вы все равно найдете решение, если загуглите.

Dominic Burford

Мне тоже кажется, что это домашнее задание.

3 Ответов

Рейтинг:
1

OriginalGriff

Есть очень простой способ: Перестановки, комбинации и вариации с использованием дженериков C# [^]

Но... дайте решение, основанное на этом, и вы, вероятно, будете изгнаны с курса за плагиат ...


Рейтинг:
0

Patrice T

Прежде всего, ваш пример требования неправильный потому что "комбинации" и "перестановки" также имею в виду не по порядку.
Это означает, что 1324, 2341, 4321 ... есть и решения тоже.

Цитата:
Есть ли быстрый способ?

Проще, чем ваш код (при условии, что он в порядке) : нет.

Как вы можете видеть, на вашем выходе отсутствуют все результаты с отверстием 124, 134, 13, 24 ...
Вы должны проанализировать, какой результат отсутствует, понять, почему, и уточнить свой код.
Отладчик может помочь вам.

Я боюсь, что полное переписывание в порядке.

[Обновление]
Подсказка для возможного решения:
- сделайте петлю, которая выбирает 1 цифру в то время
- внутри петли печатается фактический 1-значный номер
- внутри этой петли сделайте вторую петлю, которая выберет вторую цифру
- убедитесь, что это не то же самое, что первая цифра
- печать номера, состоящего из первой и второй цифр
...


Rick York

Переписать около дюжины строк-не такая уж большая проблема. :)

Patrice T

Я знаю, но это может быть немного сложно для новичка.

Richard Deeming

Неупорядоченность применима только к перестановкам, а не к комбинациям. :)

Patrice T

Поскольку оба они востребованы, я думаю, что мое решение все еще в порядке :)

Рейтинг:
0

Richard Deeming

"Комбинации" или "перестановки"? Это разные звери. Ваш пример вывода больше похож на комбинации.

В любом случае у Эрика Липперта есть хорошая серия постов в блоге, объясняющих, как они работают и как их генерировать:
Производство перестановок, часть первая | сказочные приключения в кодировании[^]
Создание комбинаций, часть первая | сказочные приключения в кодировании[^]