華師の2019ソフトウェアの専碩の再試験機の試験問題の最後の1題G:数を探します


G.探索数
単一点時限:1.0 secメモリ制限:256 MB
問題の説明
整数n(2≦n≦10)を入力すると、0~n−1の数字からなるnビット数(前置0を許可)を見つける必要があります.そして、各数字はちょうど1回しか現れません.また,このnビット数における前n/2ビット数組成の数は,後n/2ビット数組成の数の整数倍にぴったりである.条件を満たすすべてのnビット数を小さい順に出力します.
入力フォーマット
1つの整数n(2≦n≦10であり、nは偶数である).
出力フォーマット
各行にnビット数を出力します.条件を満たすすべてのnビット数を表し、昇順に並べ替えます.
テストサンプル
Input
2

Output
01

問題を解く構想.
最初に思いついたのはdfsですが、まだ使い慣れていないのでnext_permutation全列暴力列挙判断、この問題もojがないので、タイムアウトするかどうか分かりませんが、データ範囲<=10を見て、すべきです...
#include 
using namespace std;

int main()
{
  int n;
  cin >> n;
  int a[n];
  for (int i = 0; i < n; i++)
    a[i] = i;
  do
  {
    int len = n / 2, sumf = 0, sumb = 0; // sumf      sumb   
    for (int i = 0; i < len; i++)
      sumf += a[i] * pow(10, len - 1 - i); //        
    for (int i = 0; i < len; i++)
      sumb += a[n - i - 1] * pow(10, i); //        
    if (sumf % sumb == 0) //           
    {
      for (int i = 0; i < n; i++)
        cout << a[i];
      cout << endl;
    } 
  } while (next_permutation(a, a + n));

  return 0;
}