zoukankan      html  css  js  c++  java
  • POJ 1426 广搜BFS

    DescriptionGiven a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits.InputThe input file may contain multiple test cases. Each line contains a value of n (1 <= n <= 200). A line containing a zero terminates the input.OutputFor each value of n in the input print a line containing the corresponding value of m. The decimal representation of m must not contain more than 100 digits. If there are multiple solutions for a given value of n, any one of them is acceptable.

    Sample Input2
    6
    19
    0

    Sample Output

    10
    100100100100100100
    111111111111111111

    题意:给出一个数n输出一个n的倍数m,m只能由0和1组成的10进制

    一开始想不出是搜索,看到1010可以看成队列从而进行搜索得出。

    思路,从0,1,10,11,一个一个进队开始搜索,知道求出解。

    同时考虑剪枝。网上还看到可以用同余求模定理来做。打表太扯淡了。。。

    看到最基本的广搜:

    广搜思路:队列,每次进行队列的头,将最上层先完成,再慢慢往下。

    广搜一般可利用queue队列或者数组。

    循环while(head<tail);

    进行操作,操作中控制tail,每次操作head++;

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    int n;
    long long now,q[1000000];
    void bfs()
    {
            int head,tail;
            head=0;
            tail=1;
            q[tail]=1;
            while(head<tail)
            {
                head++;
                now=q[head];
                now=now*10;
                if(now%n==0)
                {
                    break;
                }
                tail++;
                q[tail]=now;
                tail++;
                q[tail]=now+1;
            }
            printf("%I64d\n",now);
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF&&n!=0)
            {
                bfs();
            }
            return 0;
    }
    


     

  • 相关阅读:
    HDU 2089 不要62
    HDU 5038 Grade(分级)
    FZU 2105 Digits Count(位数计算)
    FZU 2218 Simple String Problem(简单字符串问题)
    FZU 2221 RunningMan(跑男)
    FZU 2216 The Longest Straight(最长直道)
    FZU 2212 Super Mobile Charger(超级充电宝)
    FZU 2219 StarCraft(星际争霸)
    FZU 2213 Common Tangents(公切线)
    FZU 2215 Simple Polynomial Problem(简单多项式问题)
  • 原文地址:https://www.cnblogs.com/amourjun/p/5134235.html
Copyright © 2011-2022 走看看