Допустим, мне дано:
- Диапазон целых чисел
iRange
(т.е. от1
доiRange
) и - Желаемое количество комбинаций
Я хочу найти количество всех возможных комбинаций и распечатать все эти комбинации.
Например:
Дано: iRange = 5
и n = 3
Тогда количество комбинаций iRange! / ((iRange!-n!)*n!) = 5! / (5-3)! * 3! = 10
комбинаций, а выход:
123 - 124 - 125 - 134 - 135 - 145 - 234 - 235 - 245 - 345
Другой пример:
Дано: iRange = 4
и n = 2
Тогда количество комбинаций iRange! / ((iRange!-n!)*n!) = 4! / (4-2)! * 2! = 6
комбинаций, а выход:
12 - 13 - 14 - 23 - 24 - 34
Моя попытка до сих пор:
#include <iostream>
using namespace std;
int iRange= 0;
int iN=0;
int fact(int n)
{
if ( n<1)
return 1;
else
return fact(n-1)*n;
}
void print_combinations(int n, int iMxM)
{
int iBigSetFact=fact(iMxM);
int iDiffFact=fact(iMxM-n);
int iSmallSetFact=fact(n);
int iNoTotComb = (iBigSetFact/(iDiffFact*iSmallSetFact));
cout<<"The number of possible combinations is: "<<iNoTotComb<<endl;
cout<<" and these combinations are the following: "<<endl;
int i, j, k;
for (i = 0; i < iMxM - 1; i++)
{
for (j = i + 1; j < iMxM ; j++)
{
//for (k = j + 1; k < iMxM; k++)
cout<<i+1<<j+1<<endl;
}
}
}
int main()
{
cout<<"Please give the range (max) within which the combinations are to be found: "<<endl;
cin>>iRange;
cout<<"Please give the desired number of combinations: "<<endl;
cin>>iN;
print_combinations(iN,iRange);
return 0;
}
Моя проблема: Часть моего кода, связанная с печатью комбинаций, работает только для n = 2, iRange = 4
и я не могу заставить ее работать вообще, т.е. для любых n
и iRange
.
123 - 124 - 125 - 134 - 135 - 142 - 145 - 234 - 245 - 345
у вас есть124
и142
, что выглядит как перестановка. Комбинация должна получить вас:123 - 124 - 125 - 134 - 135 - 145 - 234 - 235 - 245 - 345
. - person Mike DeSimone   schedule 09.12.2009next_combination
в Google — достойное чтение: sites.google.com/site/hannuhelminen/ следующая_комбинация - person jfs   schedule 10.12.2009