• POJ 1426 Find The Multiple && 51nod 1109 01组成的N的倍数 (BFS + 同余模定理)


    Find The Multiple
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 21436   Accepted: 8775   Special Judge

    Description

    Given 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.

    Input

    The 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.

    Output

    For 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 Input

    2
    6
    19
    0

    Sample Output

    10
    100100100100100100
    111111111111111111

    Source





       题意:输入一个正整数n(1<=n<=200),然后要求找一个仅仅包括0和1的十进制数字能整除n




    #include<iostream>
    #include<algorithm>
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<queue>
    
    using namespace std;
    
    int n;
    int ans;
    int v[5000];
    
    struct node
    {
        int x;
        int y;
    } a[1000010];
    
    void DFS(int k)
    {
        int pt = a[k].y;
        if(pt <= 0)
        {
            printf("1");
            return ;
        }
        DFS(pt);
        printf("%d",a[pt].x);
    }
    
    void BFS()
    {
        ans = 1;
        memset(v,0,sizeof(v));
        queue<node>q;
        struct node t,f;
        t.x = 1;
        t.y = 0;
        a[0].x = 1;
        a[0].y = 0;
        q.push(t);
        while(!q.empty())
        {
            t = q.front();
            q.pop();
            for(int i=0; i<=1; i++)
            {
                f.x = t.x * 10 + i;  /// 同余模定理应用
                if(v[f.x] == 0)
                {
                    f.x = f.x % n;
                    f.y = ans;
                    q.push(f);
                    v[f.x] = 1;
                    a[ans].x = i;
                    a[ans].y = t.y;
                    if(f.x == 0)
                    {
                        DFS(ans);
                        printf("%d
    ",i);
                        return ;
                    }
                    ans++;
    
                }
    
            }
        }
    }
    
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            if(n == 0)
            {
                break;
            }
            BFS();
        }
        return 0;
    }
    



    51nod 1109

    #include<iostream>
    #include<algorithm>
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<queue>
    
    using namespace std;
    
    int n;
    int ans;
    int v[1010000];
    
    struct node {
        int x;
        int y;
    } a[1000010];
    
    void DFS(int k) {
        int pt = a[k].y;
        if(pt <= 0) {
            printf("1");
            return ;
        }
        DFS(pt);
        printf("%d",a[pt].x);
    }
    
    void BFS() {
        ans = 1;
        memset(v,0,sizeof(v));
        queue<node>q;
        while(!q.empty()){
            q.pop();
        }
        struct node t,f;
        t.x = 1;
        t.y = 0;
        a[0].x = 1;
        a[0].y = 0;
        q.push(t);
        while(!q.empty()) {
            t = q.front();
            q.pop();
            for(int i=0; i<=1; i++) {
                f.x = t.x * 10 + i;  /// 同余模定理应用
                f.x = f.x % n;
                if(v[f.x] == 0) {
                    f.y = ans;
                    q.push(f);
                    v[f.x] = 1;
                    a[ans].x = i;
                    a[ans].y = t.y;
                    if(f.x == 0) {
                        DFS(ans);
                        printf("%d
    ",i);
                        return ;
                    }
                    ans++;
    
                }
    
            }
        }
    }
    
    int main() {
        while(scanf("%d",&n)!=EOF) {
            BFS();
        }
        return 0;
    }



  • 相关阅读:
    188. 买卖股票的最佳时机 IV
    139. 单词拆分
    198. 打家劫舍
    122. 买卖股票的最佳时机II
    C#界面控件汇总
    电脑重装系统的三种方式
    SQL Server Profiler的使用
    反向路由检测 问题记录
    迅为龙芯2K1000开发板网络加载系统
    迅为IMX8M mini开发板Linix系统修改默认屏幕
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7258902.html
Copyright © 2020-2023  润新知