算法日记(Java实现)第20160715(1)期——POJ1001/POJ1002

来源:互联网 发布:吉诺比利职业生涯数据 编辑:程序博客网 时间:2024/05/29 18:00

今日题目:POJ1001、POJ1002

(一)POJ1001

题目地址:http://poj.org/problem?id=1001

1.首先考虑内置类型是否能用,显然不能用。发现内置double类型最多能保证小数点后15位精度,第16位将会有问题。

2.上网查找到与BigInteger类型类似的BigDecimal类型。该类可保存任意精度的实数,并可表示成指数形式、非指数形式。

3.主要出现的问题是忽略了题干中的“结尾不能出现零”。受内置double类型的影响,忽略了BigDecimal的运算不会将末位的0丢弃。调用其内置的stripTrailingZeros函数完美解决此问题。

源代码如下:

import java.math.BigDecimal;import java.util.Scanner;//POJ 1001/*Date: 2016.07.15 * 1st: Wrong Answer * 2nd: Wrong Answer * 3rd: Wrong Answer * 4th: Accepted */public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {BigDecimal t = sc.nextBigDecimal();int ti = sc.nextInt();String ts = t.pow(ti).toPlainString();if (ts.charAt(0) == '0' && ts.charAt(1) == '.')ts = ts.substring(1);System.out.println(ts);}}}


(二)POJ1002

题目地址:http://poj.org/problem?id=1002
1.思路较为简单,就是读入字符串,将字符串的每个字符逐一操作、转换。然后进行排序、查重。
2.主要问题是在读入字符串的时候,如果采用sc.next()则最后一个输入被抛弃,提示用户再读入一个字符串,当输入一个新字符串后,那个被抛弃的字符串被“找回”。若采用sc.nextLine(),则第一个输入读入的是换行符。
3.上述问题浪费较多的时间(包括上一题也是)。后来发现是在复制示例输入数据的时候,由于最后一行没有换行符,导致输入时就会出现输入格式问题。不过在此期间,却弄懂了next,nextLine的区别,并对相关输入流有了更清晰的认识。弄懂了所谓分隔符的意义、用法。
源代码如下:
import java.util.Arrays;import java.util.Scanner;//POJ 1002/*Date: 2016.07.15 * 1st:Wrong Answermissing "No duplicates." * 2nd:Wrong Answermissing Hyphens * 3rd:Wrong AnswerOne less output * 4th: Accepted */public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();String []sa = new String[n];for(int i = 0; i < n; i++){StringBuilder ts = new StringBuilder(sc.next());//to phone numberStringBuilder ss = new StringBuilder();for(int j = 0; j < ts.length(); j++){char ch = ts.charAt(j);if(ch == '-')continue;int ti = ch - 'A';//it's a numberif(ti < 0)ss.append(ch);else if(ti <= 2){ss.append(2);}else if(ti <= 5){ss.append(3);}else if(ti <= 8){ss.append(4);}else if(ti <= 11){ss.append(5);}else if(ti <= 14){ss.append(6);}else if(ti <= 18){ss.append(7);}else if(ti <= 21){ss.append(8);}else if(ti <= 24){ss.append(9);}}//to sort the arrays (String array can use Arrays.sort, but StringBuilder cannot)sa[i] = ss.toString();}Arrays.sort(sa);boolean flag = false;for(int i = 0; i < n; i++){int times = 1;for(int j = i + 1; j < n; j++){if(!sa[j].equals(sa[i]))break;times++;i++;}if(times != 1){System.out.println(sa[i].substring(0, 3) + "-" + sa[i].substring(3, 7) + " "  + times);flag = true;}}if(!flag){System.out.println("No duplicates. ");}}}


0 0
原创粉丝点击