OD 路灯照明问题

该篇文章介绍了如何使用Java编程解决路灯照明问题,计算出第一个和最后一个路灯之间无法被任何一盏路灯照亮的区间长度,通过遍历、排序和减法操作实现。

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


题目描述:
在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。
每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。
输入描述:
第一行为一个数N,表示路灯个数,1<=N<=100000
第二行为N个空格分隔的数,表示路径的照明半径,1<=照明半径<=100000*100
输出描述:
第一个路灯和最后一个路灯之间,无法照明的区间的长度和
补充说明:
收起
示例1
输入:
2
50 50
输出:
0
说明:
路灯1覆盖0-50,路灯2覆盖50-100,路灯1和路灯2之间(0-100)无未覆盖的区间
示例2
输入:
4
50 70 20 70
输出:
20
说明:
[170,180],[220,230],两个未覆盖的区间,总里程为20
public class 路灯照明问题 {
    public static int calculateUnilluminatedLength(int[] radii) {
        int maxCover = 0;

        // 计算路灯能够覆盖的最大范围
        for (int radius : radii) {
            maxCover = Math.max(maxCover, radius);
        }

        Arrays.sort(radii); // 对路灯半径进行排序

        int unilluminatedLength = 0;
        for (int i = 0; i < radii.length - 1; i++) {
            // 找出无法被覆盖的区间
            unilluminatedLength += radii[i + 1] - radii[i];
        }

        // 减去最左边和最右边的路灯覆盖的范围
        return unilluminatedLength - (maxCover - radii[0]) - (maxCover - radii[radii.length - 1]);
    }

    // 从控制台读取路灯个数和路灯照明半径,然后将这些半径存储在一个整型数组中。
    // 接着,它调用 calculateUnilluminatedLength 方法来计算第一个路灯和最后一个路灯之间无法照明的区间的长度。
    // 在 calculateUnilluminatedLength 方法中,我们首先找到路灯能够覆盖的最大范围,
    // 然后对路灯半径进行排序,找到无法被覆盖的区间,最后减去最左边和最右边的路灯覆盖的范围,得到无法照明的区间长度。
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入路灯个数:");
        int N = scanner.nextInt();
        scanner.nextLine();

        System.out.println("请输入" + N + "个空格分隔的照明半径:");
        int[] radii = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        int result = calculateUnilluminatedLength(radii);
        System.out.println("第一个路灯和最后一个路灯之间,无法照明的区间的长度为:" + result);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值