欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

华为2012秋季校招机试题-数组处理(题目源自网络)

程序员文章站 2022-05-03 12:13:45
...

数组处理

       给定一个数组input[] ,如果数组长度n奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,

然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

      例如:

input[] = {3, 6, 1, 9, 7}   output[] = {3, 7, 9, 6, 1};            

input[] = {3, 6, 1, 9, 7, 8}    output[] = {1, 6, 8, 9, 7, 3}

 

 

 

package com.liuhao;

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

public class ArraySort {

	public static void main(String[] args) {

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

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

		int[] input = new int[n]; // 用于存放输入数据
		int[] output = new int[n]; // 用于存放输出数据

		// 将字符串数组转换为int数组
		for (int i = 0; i < input.length; i++) {
			input[i] = Integer.parseInt(strArr[i]);
		}

		// 直接对输入数据进行排序,得到由小到大的数据
		Arrays.sort(input);

		int flag = n / 2; // 放初始值的位置

		int j = 1; // 增量

		boolean temp = true; // 用于判断是加增量,还是减增量

		for (int i = n - 1; i >= 0 && flag >= 0 && flag < n; i--) {

			output[flag] = input[i];

			if (temp) {
				flag -= j; // flag左移
			} else {
				flag += j; // flag右移
			}

			temp = !temp;
			j++;
		}

		System.out.println("处理结果:");
		for (int i = 0; i < output.length; i++) {
			System.out.print(output[i] + " ");
		}
	}
}

 

相关标签: Java 试题