華師の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
Output
問題を解く構想.
最初に思いついたのはdfsですが、まだ使い慣れていないのでnext_permutation全列暴力列挙判断、この問題もojがないので、タイムアウトするかどうか分かりませんが、データ範囲<=10を見て、すべきです...
単一点時限: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;
}