zoukankan      html  css  js  c++  java
  • POJ 1426 Find The Multiple (DFS / BFS)

    题目链接:Find The Multiple


    解析:直接从前往后搜。设当前数为k用long long保存,则下一个数不是k*10就是k*10+1



    AC代码:

    /*
    DFS
    */
    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    using namespace std;
    
    long long n;
    int DEEP;
    bool flag;
    
    void dfs(long long k, int deep){
        if(flag) return ;
        if(deep >= DEEP) return ;    //。!

    ! if(k % n == 0){ flag = true; printf("%lld ", k); return ; } dfs(k*10, deep+1); dfs(k*10+1, deep+1); } int main(){ // freopen("in.txt", "r", stdin); while(scanf("%lld", &n) == 1 && n){ flag = false; for(DEEP=1; ; DEEP++){ //!

    。! if(flag) break; dfs(1, 0); } } return 0; }

    个人感觉这样的DFS的方式。事实上还是在模拟BFS。用DEEP控制搜索的深度,当第一层搜不到的时候,DEEP++,继续搜第二层。。

    。。直到找到结果。



    BFS还是非常好懂得~

    /*
    BFS
    */
    #include <cstdio>
    #include <queue>
    using namespace std;
    
    long long n;
    
    void bfs(long long k, long long n){
        queue<long long> q;
        q.push(k);
        while(!q.empty()){
            long long x = q.front(); q.pop();
            if(x % n == 0){
                printf("%lld
    ", x);
                return ;
            }
            q.push(x*10);
            q.push(x*10+1);
        }
        return ;
    }
    
    int main(){
    //    freopen("in.txt", "r", stdin);
        while(scanf("%lld", &n) == 1 && n){
            bfs(1, n);
        }
        return 0;
    }



    可是还是有个疑点,为什么就能确定在long long的范围内一定能找到解呢???有待考证



  • 相关阅读:
    Java多线程(二)关于多线程的CPU密集型和IO密集型这件事
    Java 过一下基础
    日历打印用java实现
    DAY8-打卡第八天-2018-1-18
    web-day1-初识标识符
    DAY7-图形界面第一弹-2018-1-17
    四种排序方法用java实现
    DAY6-小变化(java提示框)-2018-1-16
    DAY5-小别-2018-1-15
    DAY4-打卡第四天-2018-1-12
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6961781.html
Copyright © 2011-2022 走看看