OJ题库ID1007:奇偶数
需求
运行结果
分析
1. 输入n n为数组元素的个数
2. 输入n个数 存储到一个数组中
3. 用Arrays对数组进行排序
4. 找出最大的偶数(输出内容的最后一个元素后面不带空格,输出的最后一个元素是最大的偶数)
5. 输出奇数
6. 输出偶数
代码实现
package top.gaojc.oj;
import java.util.Arrays;
import java.util.Scanner;
public class Odevity {
/*
OJ题库ID1007:奇偶数
给定一个长度为n的数组,请将数组中元素按照奇偶性重新划分,所有奇数靠左边,所有偶数靠右边,然后分别对奇数、偶数部分进行排序
请尽可能实现通过一次遍历并且原地操作(即不得借助其他数组)进行奇偶划分。
Input
输入有两行,第一行输入一个数字n表示数组的长度,
第二行依次输入n个数字,表示数组的元素值。
Output
打印按照奇偶排列并各自排序后的新数组,元素之间用空格隔开
Sample Input
5
2 1 5 4 3
Sample Output
1 3 5 2 4
*/
public static void main(String[] args) {
// 键盘录入数组长度
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// 定义数组 数组元素个位为n
int[] arr = new int[n];
// 输入n个数
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
// Arrays排序(升序)
Arrays.sort(arr);
// temp用来接收最大的偶数
int temp = 0;
// 循环找出最大的偶数 需要找出最大的偶数 所以做--操作
for (int i = arr.length - 1; i >= 0; i--) {
// 对2取余等于0 那么这个数就赋值给temp 找到就停止循环
if (arr[i] % 2 == 0) {
temp = arr[i];
break;
}
}
// 程序从上至下 由左至右执行
// 由题知 奇数在左 所以先输出奇数 再输出偶数
// 循环数组中所有的元素
for (int i = 0; i < arr.length; i++) {
// 找出奇数 输出 由题意得元素之间要用空格隔开 所以arr[i] + " "
if (arr[i] % 2 != 0) {
System.out.print(arr[i] + " ");
}
}
// 再循环找出所有的偶数
for (int i = 0; i < arr.length; i++) {
// 判断是否是偶数
if (arr[i] % 2 == 0) {
// 由题得最后一个元素后面没有空格(" ") 所以要判断是否是最后一个元素
// 已知奇数在左 偶数在右 并且是按照顺序排序 那么最后一个元素就是最大的偶数
// 前面已经找到最大的偶数了 所以如果arr[i] == temp 那么就只输出元素
if (arr[i] == temp) {
System.out.print(arr[i]);
} else {
// 否则就不是最后一个元素 需要+ " "
System.out.print(arr[i] + " ");
}
}
}
}
}