学习小组结伴

该博客介绍了如何根据学号进行小组结伴的算法,当学生数量为偶数时,按照升序排列学号,首尾配对。若学生数为奇数,则输出提示。文章提供了输入输出格式、样例及解题思路,强调了排序的重要性,并提到了冒泡排序和Java的Arrays#sort方法作为解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目内容:

为了促进互帮互相,决定成立学习小组。小组结伴的规则是这样的:先将学号按升序排列,排在最前的一个人和排在最后的那个人结成同伴,排在第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]);
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值