poj1426: Find the Multiple

来源:互联网 发布:公共基础知识考试软件 编辑:程序博客网 时间:2024/05/01 23:07

1. 题目就是找到一个数的可以用01序列表示的最小倍数。

2. 自己用java写,无法ac,超时。到网上查,发现大家说的也是此题可以水过去,就是数字是不需要大数的。按照正常的bfs即可。下面第一段代码就是bfs,但是没有ac.但是大家用的都是c++。自己用java无法。

3. 后来参考了高手的,才觉得写得真好。首先用同余模定理简化,当然,其实按理论最后的结果还是很大。但是按照测试,此题不用大数也可以过。然后是根据一个小窍门得到最终结果。就是求模的过程倒过来除以2就是要的数了。

首先是自己写的没有ac的:

import java.io.File;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Scanner;public class Multiple {static int n;static LinkedList<Long> queue =new LinkedList<Long>();static ArrayList<Long> list = new ArrayList<Long>();public static void main(String[] args) {// TODO Auto-generated method stubfor(int i = 1; i<=200; i++){n = i;bfs();}//File file =  new File("C://Users/23192/Desktop/multiple.txt");try {//Scanner scan = new Scanner(file);Scanner scan = new Scanner(System.in);while(scan.hasNext()){queue.clear();n = scan.nextInt();if(n==0)return;System.out.println(list.get(n-1));//bfs();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static  void bfs(){queue.add((long) 1);while(!queue.isEmpty()){Long x = queue.poll();//System.out.println("x:"+x);if(x%n==0){//System.out.println(x);list.add(x);return;}queue.add(x*10+0);queue.add(x*10+1);}}}

然后是采用小窍门后的代码:

import java.io.File;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubtry {Scanner scan = new Scanner(System.in);while(scan.hasNext()){//int []mod = new int[524286]; int []mod = new int[500000]; int n = scan.nextInt();            if(n==0)              return;            mod[1]=1%n;         int i;        for(i=2;mod[i-1]!=0;i++)             mod[i]=(mod[i/2]*10+i%2)%n;                             i--;          int pm=0;          while(i!=0)          {              mod[pm++]=i%2;              i/=2;          }          while(pm!=0)           System.out.print(mod[--pm]);        System.out.println();    }     } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}


0 0
原创粉丝点击