题目:
一.输入一组字符串, 求字符串分组后,每组的和为水仙花数
(注:水仙花数是一个三位数 其个位、十位、百位的立次方 的和等于自身 如 371 = 3^3 + 7^3 + 1^1 )
(1) 如果无法找到该分组 ,返回0 ;
(2) 找到该分组,切分组不唯一 ,返回 -1;
(3)分组唯一 ,则返回分组的组数 ;
首次参加华为机考,遇到这个题,明人不说暗话,当时没完全做出来,哈哈,卡在了如何确定分组不唯一的问题上,哎,还是自己太菜了,还需要多学习哈。废话不多说,以下是我后来想到的一种实现方式:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Main{
public static boolean isShuixian(int num) {
if(Integer.toString(num).length() != 3) {
return false;
}
int a = num / 100;
int b = num % 100 / 10;
int c = num % 10;
return Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == num;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
List<int[]> list = new ArrayList<int[]>();
while(in.hasNext()) {
String str = in.nextLine();
for(int l = 0; l < str.length(); l++) {
for(int r = l; r < str.length(); r++) {
int num = 0;
for(int i = l; i <= r; i++) {
num += str.charAt(i);
}
int len = Integer.toString(num).length();
if(len < 3) {
continue;
}
if(len > 3) {
break;
}
if(isShuixian(num)) {
list.add(new int[] {l, r});
}
}
}
int cnt = list.size();
if(cnt <= 1) {
System.out.println(cnt);
}
else {
for(int i = 0; i < cnt - 1; i++) {
for(int j = i + 1; j < cnt; j++) {
int[] pointi = list.get(i);
int[] pointj = list.get(j);
if((pointi[0] >= pointj[0] && pointi[0] <= pointj[1])
|| (pointi[1] >= pointj[0] && pointi[1] <= pointj[1])) {
System.out.println(-1);
return;
}
}
}
System.out.println(cnt);
}
}
}
}
肯定还有更好的方式,我这只是抛砖引玉哈,希望各位同仁各位大神多多指点,多谢多谢哈~~~