Java 华为真题-新学校选址

需求:

  为了解新学期学生暴涨的问题,小乐村要建立所新学校,考虑到学生上学安全问题,需要所有学生家到学校的距离最短。 假设学校和所有学生家都走在一条直线之上,请问学校建立在什么位置,能使得到学校到各个学生家的距离和最短。

输入描述:

    第一行:整数n取值范围[1,1000],表示有n户家庭。

    第二行:一组整数m取值范围[0,10000],表示每户家庭的位置,所有家庭的位置都不相同。

输出描述:

    一个整数,确定的学校的位置,如果有多个位置,则输出最小的。

 

输入

5

0 20 40 10 30

输出

20

 

编码:

public class AddressNew {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("输入用户:");
        int n = sc.nextInt();
        sc.nextLine(); // 这里使用nextLine()来接收上面的'\n'
        System.out.print("输入" + n + "个所有家庭位置:");
        String[] strs = sc.nextLine().split(" ");
        //字符串数组转换成整数数组
        int[] arr = Arrays.asList(strs).stream().mapToInt(Integer::parseInt).toArray();
        //(1)排序
        Arrays.sort(arr);
        System.out.println("排序后数据:"+Arrays.toString(arr));
        //(2)最小距离(求中位数)
        int min = 0;

        //判断是偶数还是奇数,
        if (n % 2 == 0) {
            min = arr[n / 2 - 1];
        } else {
            min = arr[n/2];
        }
        System.out.println("最小距离:" + min);
    }

}

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值