Как сделать список всех возможных сумм комбинаций в массиве для C ++? - PullRequest
2 голосов
/ 14 января 2012

У меня есть домашнее задание, и я понятия не имею, как начать с кода для решения этой проблемы.

Допустим, у меня есть целочисленный массив, состоящий из n элементов,

[A] [B] [C] [D] [E] (у нас есть 5 элементов, например)

Я хочу перечислить всю сумму вероятности, чтобы я мог распечатать сумма всей комбинации (ABCDE, ABCD, ABCE, ACDE, BCDE, ABC, ABD, ABE, ACE, ADE, BDE, CDE, AB, AC, AD, AE, BC, BD, BE, CD, CE, DE, A , B, C, D и E)

Другим примером будет 4 элемента в массиве ([A] [B] [C] [D])

Я хочу перечислить всю сумму комбинации (ABCD, ABC, ABD, ACD, BCD, AB, AC, AD, BC, BD, CD, A, B, C и D).

Надеюсь, вам всем удастся понять мой вопрос. Мне нужна помощь, и я не знаю, что с этим делать?

Ответы [ 3 ]

2 голосов
/ 14 января 2012

Ну, вот простое правило:

Набор всех комбинаций "ABCDE" состоит из тех комбинаций, которые содержат (и, следовательно, начинаются с) "A", и тех, которые не содержат "A". В обоих случаях могут встречаться все комбинации "BCDE" Конечно, комбинации "BCDE" могут обрабатываться одинаково.

0 голосов
/ 14 января 2012

Если у вас есть 3 элемента, вы можете представить каждый элемент, размещенный в определенной позиции от 1 до 3 (или от 0 до 2), и логический массив, показывающий, содержится ли элемент в определенном наборе.

ABC remark
--- ---------------------
000 no element in the set
001 one element, C
010 one element, b
100 ...
011 two elements, b and c
...
111 all elements contained

Теперь, если вы вычислите число решений, которое в данном случае составляет 2³, и сгенерируете функцию, которая выполняет преобразование из двоичного представления в набор, например, от 011 до (b, c), тогда вы можетелегко запрограммируйте цикл, который повторяет от 0 до max-1 и возвращает все множества, созданные вашей функцией отображения.

0 голосов
/ 14 января 2012

Когда вы говорите «перечислите все возможные суммы», вы имеете в виду, что хотите знать сколько комбинаций действительно возможно?

Если так, то ищите по комбинациям Nпредметы, взятые К одновременно;на этом сайте есть страницы, посвященные этой проблеме.Затем вы просто добавили бы количество комбинаций (на 5) + (на 4) + (на 3) + (на 2) + (на 1), чтобы получить свою общую «сумму возможностей».

Или вы имеете в виду, что у вас есть массив значений, и вы буквально хотите распечатать разные суммы, представленные различными комбинациями элементов?В этом случае вам нужно фактически перечислить все комбинации и оценить суммы.

Таким образом, учитывая массив {1, 2, 3, 4, 5}, вы можете закодировать его как «A», «B», "C", "D", "E".Примерами кортежей могут быть:

  • ABCDE = 1 + 2 + 3 + 4 + 5
  • ABE = 1 + 2 + 5
  • BCE = 2 + 3+ 5

и т. Д., Где вы используете закодированное перечисление для выбора сумм для вашей суммы.Обратите внимание, что решение о том, разрешать или запрещать дубликаты (т. Е. Отличается ли «DE» от «ED»), очень сильно повлияет на ваши результаты;в большинстве случаев это, вероятно, не будет тем, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...