zoukankan      html  css  js  c++  java
  • POJ-1426-Find the multiply

    这题深搜广搜都可以做,深搜的做法就是把每个由1 和 0 组成的数字拓展10倍以及拓展10倍+1,然后压入队列。

    这样可以走过所有由10组成的数字,且两个方向平行发展(*10  +0和+1)。

    bfs

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

    dfs的话,我们就要考虑这个数是不是会超范围,long long是64位的,然后有符号类型的最大十进制数是19位的,所以当我们搜到

    18位的时候,我们就可以退出了,因为这个方向搜不到,另外的一个+1方向肯定搜得到。

    当我们搜到之后,要把flag标记为1,然后让所有的递归都退出,然后也是每次每个数都向两个方向搜索,不过就是单个数是先搜到

    18位数字为顶,然后才返回,在没找到这个数的情况下。

    dfs

    #include <cstdio>
    #include <queue>
    using namespace std;
    long long n, m, f;
    
    void dfs(long long k,int bit)
    {
        if (f==1)
            return;
        if (k%n==0) {
            m = k;
            f = 1;
            return;
        }
        if (bit==18)
            return;
        dfs(k * 10,bit+1);
        dfs(k * 10 + 1,bit+1);
    }
    
    int main()
    {
        while (scanf("%lld",&n)&&n) {
            f = 0;
            dfs(1,0);
            printf("%lld
    ", m);
        }
        return 0;
    }
  • 相关阅读:
    linux mint系统 cinnamon桌面 发大镜功能
    解决sublime 的 package control 问题here are no packages available for installation
    python Tkinter 的 Text 保持焦点在行尾
    pyhton 下 使用getch(), 输入字符无需回车
    python3.5 安装twisted
    SPOJ bsubstr
    AVL的删除写法的一个错误
    病毒侵袭持续中
    POJ2778 DNA sequence
    HDU3068 最长回文串
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10405740.html
Copyright © 2011-2022 走看看