• POJ 1246 Find The Multiple


    Find The Multiple
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 15468   Accepted: 6359   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

     
    思路:暴力BFS,使用一个数组记录每一位的直接前驱,但是这样的话,
    数组需要的内存将会Fibonacci增长,显然会超内存,所以只能对于超内存
    的单独打表if(n == 99)
               printf("111111111111111111 ");
            else
            {
            if(n == 198)
               printf("1111111111111111110 ");
    哎好菜啊
     
     
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <queue>
    using namespace std;
    struct Node
    {
        int x;
        int weizhi;
        int qquweizhi;
        int biji;
    }map[100000];
    int mmm[110];
    int move[2] = {0,1};
    int biji;
    int weizhi;
    int n;
    void BFS(int x)
    {
        queue < Node > q;
        map[1].x = x;map[1].weizhi = 1;map[1].qquweizhi = 0;map[1].biji = 0;
        q.push(map[1]);
        int bbbb = 0;
        while(1)
        {
            Node temp;temp = q.front();q.pop();
            if((temp.biji * 10 + temp.x) % n == 0)
            {
                weizhi = temp.weizhi;
                int aaa = 1;
                while(weizhi != 0)
                {
                    mmm[aaa ++] = map[weizhi].x;
                    weizhi = map[weizhi].qquweizhi;
                }
                aaa --;
                for(;aaa >= 1;aaa --)
                     printf("%d",mmm[aaa]);
                printf(" ");
                return ;
            }
            temp.biji = (temp.biji * 10 + temp.x) % n;
            int wei;
            for(int i = 0;i < 2;i ++)
            {
                int y = move[i];
                if(i == 0)
                     wei = temp.weizhi + bbbb + 1;
                else
                     wei = temp.weizhi + bbbb + 2;
                map[wei].x = y;map[wei].weizhi = wei;
                map[wei].qquweizhi = temp.weizhi;
                map[wei].biji = temp.biji;
                q.push(map[wei]);
            }
            bbbb ++;
        }
    }
    int main()
    {
        while(scanf("%d",&n),n != 0)
        {
            memset(map,0,sizeof(map));
            if(n == 99)
               printf("111111111111111111 ");
            else
            {
            if(n == 198)
               printf("1111111111111111110 ");
            else
            {
              biji = 0;
              BFS(1);
            }
            }
        }
        return 0;
    }
  • 相关阅读:
    ES6中的find与filter的区别
    centos7上搭建http服务器以及设置目录访问
    JSON.parse()和JSON.stringify()的用法
    video 在iphone手机的ios系统和微信端无法自动播放
    JavaScript规范----DOM操作
    http与https的区别
    vw vh 的概念
    JS实现数组排序:升序和降序
    用Vue来实现音乐播放器(二十三):音乐列表
    JavaScript对象---递归遍历对象
  • 原文地址:https://www.cnblogs.com/GODLIKEING/p/3306664.html
Copyright © 2020-2023  润新知