手柄君的小阁

个人私货聚集地

蓝桥杯(大专组) 校内训练 1003.奇偶排序

本文最后更新于 2018 年 5 月 10 日,其中的内容可能有所发展或发生改变,敬请注意。

1003.奇偶排序

Time Limit: 1000 MS Memory Limit: 32768 KB

描述

给定一个存放正数的数组,元素个数视输入情况而定,重新排列数组使得数组左边为奇数,右边为偶数,且保证奇数和偶数之间元素相对位置不变。

输入

输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
输入字符串的格式为:“操作数1 操作数2 … 操作数n”,“操作数”与“操作数”之间以一个空格隔开。

输出

输出有t行,每行依次对应一组测试数据的运算结果。

示例输入

示例输出

7 1 9 32 56 32
23 11 3 2 68 98 2 68 100
3 5 1 23 567 3 12 22 876 2 56 78

解题思路

可以对输入的数组进行简单的两边遍历,
第一遍将所有奇数置于一个新的数组内,
第二遍将所有偶数放置在奇数后面即可

Ac源码(Java)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.Arrays;
import java.util.Scanner;
 
public class Main {
 
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int times= sc.nextInt();
		sc.nextLine();
		String[] counts = new String[times];
		for (int i = 0; i < times; i++){
			counts[i] = sc.nextLine();
		}
		sc.close();
		String[] strArr;
		String outStr;
		int[] intArr, outArr;
		int counter;
		for (int i = 0; i < times; i++){
			strArr = counts[i].split(" ");
			counter = 0;
			intArr = new int[strArr.length];
			outArr = new int[strArr.length];
			for (int j = 0; j < strArr.length; j++){
				intArr[j] = Integer.parseInt(strArr[j]);
			}
			for (int inOf : intArr){
				if(inOf % 2 == 1){
					outArr[counter++] = inOf;
				}
			}
			for (int inOf : intArr){
				if(inOf % 2 == 0){
					outArr[counter++] = inOf;
				}
			}
			outStr = Arrays.toString(outArr).replaceAll(",", "");
			System.out.println(outStr.substring(1, outStr.length()-1));
		}
	}
}

来一发吐槽