これはクラス用なので、あまり具体的にしないでください。ただし、数字の配列のすべての順列をリストする方法を探しています。
組み合わせのロックを解除するには、さまざまな柱 (ロックなど) にさまざまな数字を配置する必要があります。4 つの柱のそれぞれに 6 つの数字がある場合があります。ただし、n>r である限り、r 上の任意の n に対して機能するはずです。
組み合わせをランダムに生成し、リストでそれを系統的に探す方法がありますが、すべての順列を生成するアルゴリズムを作成するのに問題があります。
C++ でこれを使用して、数字 1 ~ 6 のすべての組み合わせを取得できます。
//n = number of digits - 1; list = list of digits to work with;
//number=finalized list of digits
void permute(int n, vector<int> list, vector<vector<int>>* number)
{
if(n==1)
{
number->push_back(list);
}else
{
for(int i = 1;i<n;i++)
{
permute(n-1,list, number);
if(n%2 == 0)
{
swap(list[1],list[n]);
}else
{
swap(list[i],list[n]);
}
}
}
};
しかし、123456 163452 などのリストを取得します。1 は常に最初の数字ですが、最初の数字が入れ替わって 4 桁しか存在しない場合にも取得する必要があります。
例
6341
4163
など、1 ~ 6 の範囲の 4 桁の数字があり、すべての可能な組み合わせがあります。
これを補完する別のアルゴリズムの正しい方向に誰かが私を向けることができますか?