2

問題は簡単です。指定された数字のセット (最大 10 桁) から、この数字から作成できるすべての数字を計算します (数字は、セットに含まれる回数だけ使用できます)。

こぶし 総当たりを使って可能な限りの組み合わせを実行することを考えますが、組み合わせの数は N の階乗 (N は桁数) と同じくらい多くなります。また、可能な場合でも、10 個の for ループを使用せずに、考えられるすべての組み合わせを実行するにはどうすればよいでしょうか?

2番目に、これらすべての数字を文字列に入れ、文字列から1つを消去して最後に配置し、このように試行し続けようとしましたが、これはおそらく可能な組み合わせを提供しません。合理的な時間になります。

与えられた数字のセットからすべての可能な数値を取得するための、より迅速で優れたアルゴリズムが必要であると確信しています。

インターネットで 1 つのコードを見つけましたが、それは次のとおりです。

#include <iostream>
#include <algorithm>
using namespace std;
int main () {
    int noOfDigits;
    cin >> noOfDigits;
  int myints[noOfDigits];
  for(int i = 0; i<noOfDigits; i++)
  {
      cin >> myints[i];
  }

  sort (myints,myints+3);
  do {
        for(int i = 0; i<noOfDigits;i++)
        {
            cout << myints[i];
        }
        cout << endl;
  } while ( next_permutation(myints,myints+noOfDigits) );
  return 0;
}
4

1 に答える 1