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

华为2017实习生招聘笔试题-公司年会

2017-04-07 21:56 537 查看
公司年会





解题思路

N是输入的三个数中最大的数,因此N最大为9。由于任意3个不重复的数(不考虑2,5,6,9倒转的情况)组成的一位数有3种,两位数有6种,加起来9种。如果考虑2,5,6,9倒转情况则种树更多,因此这题的题设下就不需要考虑三位数的情况,因为是求从小到大第N大的数(三位数肯定在9开外)

考虑各种不合法输入

public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String in = sc.nextLine();
String[] numsOfString = in.split(",");

if(numsOfString.length != 3){//必须三个数字
System.out.println(-1);
return;
}
int[] nums = new int[3];//存储三个输入数字
for(int i = 0; i < 3; i++){
nums[i] = Integer.valueOf(numsOfString[i]);
}
int twoOrFive = 0;
int sixOrNine = 0;
for(int n : nums){//判断数字是否符合要求
if(n < 1 || n > 9){
System.out.println(-1);
return;
}
if(n == 2 || n == 5)
twoOrFive++;
if(n == 6 || n == 9)
sixOrNine++;
}
if(twoOrFive == 2 || sixOrNine == 2){//2,5或6,9一起出现,不符合要求
System.out.println(-1);
return;
}
if(nums[0] == nums[1] || nums[0] == nums[2] || nums[1] == nums[2]){//不能有重复数字
System.out.println(-1);
return;
}
List<Integer> list = new ArrayList<Integer>();//结果序列
for(int i = 0; i < 3; i++) {//放入1位数
int num = nums[i];
if(num == 2 || num == 5 || num == 6 || num == 9){
if(num == 2 || num == 5){
list.add(2);list.add(5);
}
else{
list.add(6);list.add(9);
}
}
else
list.add(num);
}
int size = list.size();
for(int i = 0; i < size; i++)//放入2位数
for(int j = 0; j < size; j++)
if(i != j)
if(isOk(list.get(i),list.get(j)))
list.add(list.get(i) * 10 + list.get(j));
int max = Math.max(Math.max(nums[0],nums[1]),nums[2]);
Collections.sort(list);//排序
System.out.println(list.get(max - 1));
}
public static boolean isOk(int n,int m){//生成两位数的时候2,5或6,9不能一起算
if(n == 2 || n == 5)
return m != 2 && m != 5;
else if(n == 6 || n == 9)
return m != 6 && m != 9;
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  华为 java 试题