题目内容:
为了促进互帮互相,决定成立学习小组。小组结伴的规则是这样的:先将学号按升序排列,排在最前的一个人和排在最后的那个人结成同伴,排在第2个的与排在倒数第2个的结成同伴…依次类推,2个一组成同伴。
输入格式:
第一行是一个整数n,表明n个同学。(2<=n<=50,n为偶数) 。 第二行n个整数表明n个同学的学号,学号之间有一个空格,学号是无序输入的。
如果输入的学生数是奇数,则输出提示信息:“odd number”
输出格式:
共n/2行,每行二个整数,表明结伴同学的学号,两个学号之间有一个空格。
输入样例:
8
15 6 24 12 13 21 8 4
输出样例:
4 24
6 21
8 15
12 13
思路:
本道题关键难点在于全排列,排序排好之后,将第0个与最后一个,第1个与最后一个-1个输出就完成了。
排序
排序算法对于初学者有一些难度,这里提供链接十大经典排序算法最强总结,感兴趣的可以自己思考,这里讲述最基础和最取巧的两种办法。
最基础的办法是冒泡排序
int[] intArray = new int[]{11, 41, 5, 451, 2, 21, 122, 535, 352};
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < intArray.length - 1 - i; j++) {
if (intArray[j] > intArray[j + 1]) {
intArray[j] ^= intArray[j + 1];
intArray[j + 1] ^= intArray[j];
intArray[j] ^= intArray[j + 1]; // 两次异或交换数值,仅限整形
}
}
}
System.out.println(Arrays.toString(intArray));
最取巧的办法直接用java自带的Arrays#sort方法
Arrays#sort方法在JDK很早的版本就已经存在,比赛中基本都可以用的出来,而sort的本质是一个二分排序,性能比冒泡会更加优秀,可以放心使用
完整代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
if(n%2 != 0){
System.out.println("odd number");
System.exit(0);
}
int[] line = new int[n];
for(int i = 0;i < n;i++){
line[i] = scanner.nextInt();
}
Arrays.sort(line);
int i = n / 2;
for(int k = 0; k< i;k++){
System.out.println(line[k] + " "+ line[n - 1 - k]);
}
}
}