求m可以被n整除的数(深搜剪枝题)
给一个数n,让你找出一个只由0,和1组成的十进制数m,
要求这个正整数m可以被n整除.
输入格式
输入一个整数n(1<=n<200)
输出格式
对于输入整数n的每一个值,输出m的相应值,保证有一个
数字长度小于19位的数字.如果有一个给定值n有多个解,
其中任何一个都是可以接受的.
题解:一个cnt记录位数,对应m值,搜索加0或者加1;不用遍历每个数值,如果一旦找到,输出就行,不用往下搜索.这个剪枝比较不太明显
代码如下
#include <bits/stdc++.h>
using namespace std;
int n;
bool flag=false;
void dfs(long long m, int cnt) {
if (cnt >= 19) {
return;
}
if (flag) {
return;
}
if (m % n == 0) {
flag = true;
cout << m << endl;
return;
}
dfs(m * 10 + 0, cnt + 1);
dfs(m * 10 + 1, cnt + 1);
}
int main() {
cin >> n;
dfs(1, 0);
return 0;
}