题目描述
编写一个函数,将输入的一串10个数字进行从小到大排序,但是要求偶数放在偶数位置上,奇数放在奇数位置上。
缺失的位置由0补齐。输入中不会有0。
输入
输入10组随机数字
输出
按照规则排序后输出
样例输入
53 8 21 43 3 7 51 62 13 68
样例输出
3 8 7 62 13 68 21 0 43 0 51 0 53
提示
无
地区
西安研究所
public static String oddAndEvenNumberSeated(String input){
String[] sArr=input.split(" ");
if(sArr.length==0)
return null;
int[] iArr=new int[sArr.length];
for(int i=0;i<sArr.length;i++){
try{
iArr[i]=Integer.valueOf(sArr[i]);
}
catch(NumberFormatException ex){
return "请输入正确格式的字符串,必须为数字!";
}
}
Arrays.sort(iArr);//排序
Stack<Integer> stackOdd=new Stack<Integer>();//存放奇数
Stack<Integer> stackEven=new Stack<Integer>();//存放偶数
for(int i=iArr.length-1;i>=0;i--){
if(iArr[i]%2==0){
stackEven.push(iArr[i]);
}else{
stackOdd.push(iArr[i]);
}
}
List<Integer> list=new ArrayList<Integer>();//存放对号入座的奇偶数
boolean firstIsEven=false;//判断输入的最小的数是不是偶数
if(iArr[0]%2==0){
list.add(0);
firstIsEven=true;
}
if(firstIsEven){//最小的数是偶数的情况
while(!stackOdd.isEmpty()||!stackEven.isEmpty()){
if(!stackEven.isEmpty()){
list.add(stackEven.pop());
}else{
list.add(0);
}
if(!stackOdd.isEmpty()){
list.add(stackOdd.pop());
}else{
list.add(0);
}
}
}else{//最小的数是奇数的情况
while(!stackOdd.isEmpty()||!stackEven.isEmpty()){
if(!stackOdd.isEmpty()){
list.add(stackOdd.pop());
}else{
list.add(0);
}
if(!stackEven.isEmpty()){
list.add(stackEven.pop());
}else{
list.add(0);
}
}
}
StringBuilder sb=new StringBuilder();
for(int num:list){
sb.append(String.valueOf(num)+" ");
}
sb.deleteCharAt(sb.length()-1);//删除末尾空格
while(sb.charAt(sb.length()-1)=='0'){
sb.deleteCharAt(sb.length()-1);//删除末尾数字0
sb.deleteCharAt(sb.length()-1);//删除末尾空格
}
return sb.toString();
}