求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