題目描述
編寫一個函數,將輸入的一串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();
}