求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;
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM