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] + " "); } } } } }