您的位置:首页 > 编程语言 > Java开发

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

2016-07-15 15:28 363 查看
今日题目: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 Answer	missing "No duplicates."
* 2nd:	Wrong Answer	missing Hyphens
* 3rd:	Wrong Answer	One 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
;
for(int i = 0; i < n; i++){
StringBuilder ts = new StringBuilder(sc.next());
//to phone number
StringBuilder 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 number
if(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. ");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: