同様の問題を検索して見つけましたが、それらはすべて私のものには合わないようでした。基本的に、ループを N 回ネストし、最後のループだけにすべてを出力する再帰関数を作成する必要があります。問題に対する別の解決策を見つけることができれば、それは素晴らしいことです。
0 = *
1 = +
2 = ABC
3 = DEF
...
8 = STU
9 = VWXYZ
完全なコードは次のとおりです: http://pastebin.com/2YdQ693N
ハードコーディングされた N=3 の例を次に示します。
//sout is a vector<string>
for(int i = 0; i < sout[0].size(); i++)
{
for(int j = 0; j < sout[1].size(); j++)
{
for(int k = 0; k < sout[2].size(); k++)
{
cout << sout[0][i] << sout[1][j] << sout[2][k] << endl;
}
}
}
この特定の例の次の出力 (入力は「123」):
+AD
+AE
+AF
+BD
+BE
+BF
+CD
+CE
+CF
ここに来る前に得た最も近いものは、http: //v2.cplusplus.com/forum/beginner/68434/に似た再帰関数でしたが、私の場合はうまくいきませんでした。
このタイプの順序でインデックスを作成する必要があります。
000
001
002
010
011
012
020
021
022
ただし、長さは可変でなければなりません (したがって、高さも同様です)。
私がこれまで試してきた再帰関数は次のとおりです。
void recurseLoop(const vector<string>& sout, int numLoops)
{
if(numLoops > 0)
{
for(int i = 0; i < sout[1].size(); i++)
{
//cout << i;
recurseLoop(sout, numLoops - 1);
}
}
else
{
//cout << endl;
return;
}
}
ただし、「i」が与える結果はほとんど理解できず、これを機能させるためのループ/if ステートメントの正しい構造を取得するのに問題があります。どんな助けでも大歓迎です!