мне все-таки кажется, что через рекурсию это быстрее пишется, меньше шанс ошибиться:
procedure Recur(iLevel:integer);
var i:integer;
begin
if iLevel=iLevelCount then Process(X)
else
for i:=0 to Ai[iLevel].Count-1 do
begin
X[iLevel]:=Ai[iLevel][i];
Recur(iLevel+1)
end;
end;
Recur(0);
А… Ой… Сипец. Простите за комменты и предидущие ответы, не осилил, что количество множеств — не константа.
Ответ:
Если есть массив A множеств /массивов Ai, алгоритм таков:
int c = 1;
int* divs = new int[A.count];
divs[A.count — 1] = 1;
for (int i = A.count -2; i >= 0; i++)
divs[i] = divs[i+1]*A[i].count;
for (int i = 0; i < A.count; i++) c *= A[i].count; //c — количество
int i = 0;
while (i < c)
{
for (int k = 0; k < A.count; k++)
cout << (i / divs[k]) % A[k].count;
count << endl;
i++;
}
Как-то так. Это то о чем говорил OLS. — вариант с одним циклом от 0 до ACount*BCount*...*ZCount-1 и затем определением всех текущих индексов mod/div-ом.
Есть еще
— вариант с рекурсией до глубины, равной букве
и
— вариант с одним циклом от 0 до ACount*BCount*...*ZCount-1 и затем определением всех текущих индексов mod/div-ом.
Вар.1. Поставить Corel DRAW, хоть триал, сделать трассировку (векторизацию), сохранить как SVG, AI или CDR.
Вар.2. Найти фрилансера кто сделает за отзыв или за доллар. www.free-lance.ru/
Услуга обзывается «отрисовка в вектор»