求助
本人在写 1209.带分数 这道题目如下代码时发现了一点问题
正常代码:(输入100 答案是11)
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 20;
int n, ans = 0;
bool st[N], backup[N];
bool check(int a, int c) {
int b = n * c - a * c;
if (!a || !b || !c) return false;
memcpy(backup, st, sizeof st);
while (b) {
int x = b % 10;
b /= 10;
if (!x || backup[x]) return false;
backup[x] = true;
}
for (int i = 1; i <= 9; i++) {
if (!backup[i]) return false;
}
return true;
}
void dfs_c(int u, int a, int c) {
if (u == n) return;
if (check(a, c)) ans++;
for (int i = 1; i <= 9; i++) {
if (!st[i]) {
st[i] = true;
dfs_c(u + 1, a, c * 10 + i);
st[i] = false;
}
}
}
void dfs_a(int u, int a) {
if (a >= n) return;
if (a) dfs_c(u, a, 0);
for (int i = 1; i <= 9; i++) {
if (!st[i]) {
st[i] = true;
dfs_a(u + 1, a * 10 + i);
st[i] = false;
}
}
}
int main() {
cin >> n;
dfs_a(0, 0);
cout << ans << endl;
return 0;
}
但是将
int n, ans = 0;
bool st[N], backup[N];
这两句交换位置答案就会错误(输入100 输出为0)
是C++本身语法规定了不同类型之间的声名顺序了吗?还是我的程序本身就写错了,求助
求助!
###cy