Есть ли функция для выдачи выхода [1, 2, 3, 12, 23, ...]? - PullRequest
0 голосов
/ 15 октября 2019

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

Если у меня есть три числа [1, 2, 3], массивы должны быть [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3].

В данный момент он работает с некоторыми жестко запрограммированными циклами for-Loops, но я могуНе могу понять, как это сделать с помощью функции.

int numElements = 5;

for (int i = 0; i < numElements - 1; i++)
{
  for (int j = i+1; j < numElements; j++)
  {
    arr.add (new int[]{i, j});
  }
}

for (int i = 0; i < numElements - 2; i++)
{
  for (int j = i+1; j < numElements - 1; j++)
  {
    for (int k = j + 1; k < numElements; k++)
    {
      arr.add (new int[]{i, j, k});
    }
  }
}

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Вы хотите создать все подмножества, кроме пустого. Существует 2^n-1 таких подмножеств, и мы можем сопоставить каждое подмножество целочисленному значению в диапазоне.
Псевдокод

for (int i = 1; i < (1<<n); i++){
   x = i;
   k = 0; 
   subset = [];
   while (x) {
       if (x & 1)           //if k-th bit is set in x
           subset.add(A[k]);
       x >>= 1;         //shift right
       k++;
   }
   print subset;
 }
0 голосов
/ 15 октября 2019

в python вы можете использовать комбинации, чтобы хотя бы сохранить правильный порядок, но вам придется перебирать все длины:

from itertools import combinations 
# all combinations of length 2
comb = combinations([1, 2, 3], 2) 

# Print the combinations 
for i in list(comb): 
    print(i)

Вывод:
(1,2)
(1,3)
(2,3)

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