• 1109 01组成的N的倍数


    基准时间限制:1 秒 空间限制:131072 KB 
    给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1。求最小的M。
     
    例如:N = 4,M = 100。
    Input
    输入1个数N。(1 <= N <= 10^6)
    Output
    输出符合条件的最小的M。
    Input示例
    4
    Output示例
    100
    http://www.cnblogs.com/zzuli2sjy/p/5731745.html一样;
      1 #include <cstdio>
      2 #include <cstdlib>
      3 #include <cstring>
      4 #include <cmath>
      5 #include <iostream>
      6 #include <algorithm>
      7 #include <map>
      8 #include <queue>
      9 #include <vector>
     10 #include<set>
     11 using namespace std;
     12 typedef long long LL;
     13 bool flag[6000000];
     14 int ans[20];
     15 set<int>que;
     16 set<int>::iterator it;
     17 typedef struct pp
     18 {
     19         int mod;
     20         int id;
     21         int pre;
     22         int digit;
     23         pp()
     24         {
     25             pre=-1;
     26         }
     27 } ss;
     28 ss bns[1000000];
     29 int ask[1000000];
     30 int cp[2000000];
     31 int  bfs(int n,int m);
     32 int main(void)
     33 {
     34         int i,j,k;
     35         while(scanf("%d",&k)!=EOF)
     36         {
     37                 int n;
     38                 int m;
     39                 que.clear();
     40                 cp[0] = 0;cp [1] = 1;
     41                 n = 2;
     42                  ans[0]=cp[0];
     43                 int uu=cp[0];
     44                 int t=1;
     45                  for(i=1;i<n;i++)
     46                  {
     47                      if(cp[i]!=uu)
     48                      {
     49                          ans[t++]=cp[i];
     50                          uu=cp[i];
     51                      }
     52                  }
     53 
     54                 if(k==0)printf("0
    ");
     55                 else
     56                 {
     57                         int sum=0;
     58                         int id=bfs(t,k);
     59                         if(id==-1)
     60                         {
     61                                 printf("0
    ");
     62                         }
     63                         else
     64                         {
     65                                 while(id!=-1)
     66                                 {
     67                                         ask[sum++]=bns[id].digit;
     68                                         id=bns[id].pre;
     69                                 }
     70                                 for(i=sum-1; i>=0; i--)
     71                                 {
     72                                         printf("%d",ask[i]);
     73                                 }
     74                                 printf("
    ");
     75                         }
     76                 }
     77         }
     78         return 0;
     79 }
     80 int  bfs(int n,int m)
     81 {
     82         int i,j,k;
     83         int kk=0;
     84         memset(flag,0,sizeof(flag));
     85         queue<ss>stc;
     86         for(i=0; i<n; i++)
     87         {
     88                 int mod=ans[i]%m;
     89                 if(!flag[mod]&&ans[i]!=0)
     90                 {
     91                         flag[mod]=true;
     92                         bns[kk].id=kk;
     93                         bns[kk].mod=mod;
     94                         bns[kk].pre=-1;
     95                         bns[kk].digit=ans[i];
     96                         stc.push(bns[kk]);
     97                         kk++;
     98                 }
     99         }
    100         while(!stc.empty())
    101         {
    102                 ss tt=stc.front();
    103                 stc.pop();
    104                 for(i=0; i<n; i++)
    105                 {
    106                         int mod=(tt.mod*10+ans[i])%m;
    107                         if(!flag[mod])
    108                         {
    109                                 bns[kk].id=kk;
    110                                 bns[kk].pre=tt.id;
    111                                 bns[kk].mod=mod;
    112                                 bns[kk].digit=ans[i];
    113                                 if(mod==0)
    114                                 {
    115                                         return kk;
    116                                 }
    117                                 stc.push(bns[kk]);
    118                                 kk++;
    119                                 flag[mod]=true;
    120                         }
    121                 }
    122         }
    123         return -1;
    124 }
    
    
    油!油!you@
  • 相关阅读:
    spring源码下载
    java资料共享
    《Linux命令行与shell脚本编程大全》读书笔记
    《微服务设计》读书笔记
    tornado关于AsyncHTTPClient的使用笔记
    java stackoverflowerror与outofmemoryerror区别(转)
    JAVA关于泛型的笔记
    在JAVA中返回类型使用泛型T和Object有什么区别?
    《构架师的12项修炼》读书笔记
    关于控制台输入的代码怎么跑单元测试的问题记录
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5843980.html
Copyright © 2020-2023  润新知