给定一个n,表示n位编号,求n位编号中前半部分和后半部分之后相等的编号个数。
网上的题解大都只写出最后答案而不指出过程,而我用的是暴搜预处理,按位从0到9赋值,搜索出个数。
#include <cstdio>
#include <cmath>
int a[10];
int c[10];
void dfs(int x, int n) {
if (x == n + 1) {
int sum1 = 0, sum2 = 0;
for (int i = 1; i <= n / 2; i++) {
sum1 += a[i];
}
for (int i = n / 2 + 1; i <= n; i++) {
sum2 += a[i];
}
if (sum1 == sum2) {
c[n]++;
}
return;
}
for (int j = 0; j <= 9; j++) {
a[x] = j;
dfs(x + 1, n);
}
}
int main(int argc, char const *argv[]) {
for (int i = 2; i < 10; i += 2) {
dfs(1, i);
}
int k;
while (scanf("%d", &k) == 1) {
printf("%d\n", c[k]);
}
return 0;
}