Я предполагаю, что вы имели в виду, что количество элементов в массиве неизвестно, для которых я использовал sizeof(). И, как и многие другие, вы только гнездились 5 для петель.
int main()
{
//naming arrays a,b,c,d,e, change accordingly
//this function prints the combinations of 1 char
int aElements = sizeof(a)/sizeof(a[0]);
int bElements = sizeof(b)/sizeof(b[0]);
int cElements = sizeof(c)/sizeof(c[0]);
int dElements = sizeof(d)/sizeof(d[0]);
int eElements = sizeof(e)/sizeof(e[0]);
for (int i = 0; i < aElements; i++){
for (int j = 0; j < bElements; j++){
for (int k = 0; k < cElements; k++){
for (int l = 0; l < dElements; l++){
for (int m = 0; m < eElements; m++){
cout << a[i] << b[j] << c[k] << d[l] << e[m] << endl;
}
}
}
}
}
}
Для того, чтобы выяснить количество комбинаций вы можете поставить счетчик во внутреннем цикле, или просто разделить количество элементов комбинации числа (1, в данном случае) и умножая их всех. E.G, в вашем примере это будет (4/1) * (2/1) * (2/1) * (6/1) * (2/1) = 192 комбинаций. Если вы делаете комбинации на 2 символа, во втором примере это будет (4/2) * (2/2) * (2/2) * (6/2) * (2/2) = 6 комбинаций. Следующая функция выводит комбинации 2.
int main()
{
//naming arrays a,b,c,d,e, change accordingly
//this function prints the combinations of 2 chars
int aElements = sizeof(a)/sizeof(a[0]);
int bElements = sizeof(b)/sizeof(b[0]);
int cElements = sizeof(c)/sizeof(c[0]);
int dElements = sizeof(d)/sizeof(d[0]);
int eElements = sizeof(e)/sizeof(e[0]);
for (int i = 0; i < aElements - 1; i+=2){
for (int j = 0; j < bElements - 1; j+=2){
for (int k = 0; k < cElements - 1; k+=2){
for (int l = 0; l < dElements - 1; l+=2){
for (int m = 0; m < eElements - 1; m+=2){
cout << a[i] << a[i+1] << b[j] << b[j+1] << c[k] << c[k+1] << d[l] << d[l+1] << e[m] << e[m+1] << endl;
}
}
}
}
}
}
Все, что я сделал для 2-го было счетчики увеличиваются на 2, а не 1, вычесть 1 из числа элементов, которые не выходят за пределы, и печать 2 последовательных элементов, а чем 1. Это будет работать для любого количества комбинаций символов.
ПРИМЕЧАНИЕ: это базовый класс C++, поэтому мне нужно использовать базовый метод для этого, а не векторы или что-либо. – Foxic
Дубликат [Декартово произведение нескольких векторов] (http://stackoverflow.com/questions/2405242/ декартово-продукт-оф-несколько векторов). –
Как я уже сказал, мне нужен базовый метод, не использующий векторы, так что вопрос мне не помогает – Foxic