数组奇偶交叉重组_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 数组奇偶交叉重组

数组奇偶交叉重组

 2014/3/24 15:52:06  NO.6  程序员俱乐部  我要评论(0)
  • 摘要:数组奇偶交叉重组对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数,若奇数和偶数不等长,则把剩下的直接放到数组中。思路:先进行奇偶判断,得到奇数和偶数数组。然后对两数组排序,进行长度判断,最后组织数据。难点在于最后的数据重组,特别是在两个数组长度不相等的情况下。packagecom.liuhao;importjava.util.Arrays;importjava.util.Scanner;publicclassOddEvenNum2
  • 标签:数组

class="MsoNormal" style="line-height: 19.5pt; text-align: center;">数组奇偶交叉重组

????? 对一个数组,将数组中偶数从大到小排序,奇数从小到大排序奇数和偶数交叉着放且输出数组第一位放奇数,若奇数和偶数不等长,则把剩下的直接放到数组中。

????????? 思路:先进行奇偶判断,得到奇数和偶数数组。然后对两数组排序,进行长度判断,最后组织数据。

难点在于最后的数据重组,特别是在两个数组长度不相等的情况下。

?

?

package com.liuhao;

import java.util.Arrays;
import java.util.Scanner;

public class OddEvenNum2 {
	public static void main(String[] args) {

		System.out.println("请输入一组数字,以空格间隔,以回车结束:");
		Scanner scan = new Scanner(System.in);

		// 由于不知道输入的元素个数,故只能先读入到字符串中,然后进行分割
		String str = scan.nextLine();
		String[] strArr = str.split("\\s+");

		int n = strArr.length;

		int[] input = new int[n];// 存放输入数据
		int[] output = new int[n];// 存放最终交叉后的数据

		int[] oddArr = new int[n];// 存放奇数
		int[] evenArr = new int[n];// 存放偶数

		int oddNum = 0;// 奇数个数
		int evenNum = 0;// 偶数个火速

		for (int i = 0; i < n; i++) {
			input[i] = Integer.parseInt(strArr[i]);
		}

		// 对奇偶进行区分,分别放到各自分数组中
		for (int i = 0; i < n; i++) {
			if (0 == input[i] % 2) {
				evenArr[evenNum++] = input[i];
			} else {
				oddArr[oddNum++] = input[i];
			}
		}

		// 删除多余的0
		oddArr = Arrays.copyOfRange(oddArr, 0, oddNum);
		evenArr = Arrays.copyOfRange(evenArr, 0, evenNum);

		// 从小到大进行排序
		Arrays.sort(oddArr);
		Arrays.sort(evenArr);

		oddNum = 0;
		evenNum = 0;

		for (int i = 0; i < n;) {
			
			//当奇数添加完之后。这个if语句便不在执行
			if (oddNum < oddArr.length) {
				output[i++] = oddArr[oddNum++];
			}
			if (evenNum < evenArr.length) {
				output[i++] = evenArr[evenNum++];
			}
		}

		System.out.println("初始输入:");
		for (int i = 0; i < input.length; i++) {
			System.out.print(input[i] + " ");
		}

		System.out.println("\n奇数集合:");
		for (int i = 0; i < oddArr.length; i++) {
			System.out.print(oddArr[i] + " ");
		}

		System.out.println("\n偶数集合:");
		for (int i = 0; i < evenArr.length; i++) {
			System.out.print(evenArr[i] + " ");
		}

		System.out.println("\n交叉后的结果:");
		for (int i = 0; i < output.length; i++) {
			System.out.print(output[i] + " ");
		}

	}
}

?

?运行结果:

?

请输入一组数字,以空格间隔,以回车结束:
12 3 4 34 35 12 4 574 34 654 234 56 67 23 56 34 57 31 46
初始输入:
12 3 4 34 35 12 4 574 34 654 234 56 67 23 56 34 57 31 46
奇数集合:
3 23 31 35 57 67
偶数集合:
4 4 12 12 34 34 34 46 56 56 234 574 654
交叉后的结果:
3 4 23 4 31 12 35 12 57 34 67 34 34 46 56 56 234 574 654

?

?

发表评论
用户名: 匿名