Все возможные комбинации цифр в массиве - C (СИ)
Формулировка задачи:
Доброго времени суток,у меня такой вопрос.
функция принимает массив из целых чисел и его велечину. и пичатает мне все возможные комбинации этих чисел.
к примеру:
int ar[]={1,2,3}, size=3 массив.
аутпут будет такой:
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2
заранее спасибо.
Решение задачи: «Все возможные комбинации цифр в массиве»
textual
Листинг программы
#include <stdio.h>
unsigned combine(FILE* _out, int* arr, int num){
unsigned n;
int k, t, a, b, i, j, m;
for(n = 0, j = m = 1; j != 0; ++n){
for(i = 0; i < num; ++i)
fprintf(_out, "%d ", arr[i]);
fputc('\n', _out);
for(a = m, b = 0, j = num; j > 0; --j){
i = a % j;
a /= j;
if(i != 0){
if(a & 1)
i = j - i;
k = b - 1 + i;
t = arr[k];
arr[k] = arr[b + i];
arr[b + i] = t;
break;
} else
b += 1 - (a & 1);
}
++m;
}
return n;
}
int main(void){
int a[] = { 1, 2, 3, 4 };
unsigned n = combine(stdout, a, sizeof(a)/sizeof(a[0]));
printf("count: %u\n", n);
return 0;
}