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
- POJ1426 Find The Multiple
- poj1426 Find The Multiple
- poj1426 - Find The Multiple
- POJ1426 Find The Multiple
- POJ1426-Find The Multiple
- poj1426 Find The Multiple
- poj1426-Find The Multiple
- POJ1426 Find the multiple
- POJ1426-Find The Multiple
- POJ1426 Find The Multiple
- poj1426 Find The Multiple
- Find The Multiple poj1426
- poj1426 find the multiple
- POJ1426 - Find The Multiple
- poj1426 Find The Multiple
- poj1426 Find The Multiple
- poj1426: Find the Multiple
- POJ1426 Find The Multiple
- 选择排序
- 【codevs 1961】 躲避大龙
- JavaScript高级程序设计笔记-引用类型
- 代码动态设置图标的大小和位置的工具类
- hello Kotlin
- poj1426: Find the Multiple
- 使用伪造,更好地测试
- python functools模块
- 分享一款Web压力测试工具Pylot
- php 获取本周星期一到天的各自时间戳(从早上零点到晚上23:59)
- 用.msi安装node时安装失败,出现rolling back action
- maven 打可执行jar
- 真实项目运用-RecyclerView封装
- 使用contexts来避免goroutines泄露