【华为OD机试真题】3、 路灯照明问题

 
 输入 在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。 每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。   输出 第一个路灯和最后一个路灯之间,无法照明的区间的长度和 
 

package main

import (
	"fmt"
)

func main() {
	var n int
	fmt.Scan(&n)

	lightDistanceList := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&lightDistanceList[i])
	}

	defaultDistance := 100

	list := make([]int, (n-1)*defaultDistance)
	for i, _ := range list {
		list[i] = 0
	}
	for i := 0; i < n; i++ {
		//计算相邻两盏等的照明范围
		rangeItem := make([]int, 2)
		rangeItem[0] = i * defaultDistance
		rangeItem[1] = rangeItem[0]
		if i > 0 {
			rangeItem[0] = rangeItem[0] - lightDistanceList[i]
		}

		if i == n-1 {
			rangeItem[1] = (n - 1) * defaultDistance
		} else {
			rangeItem[1] = rangeItem[1] + lightDistanceList[i]
		}

		if rangeItem[0] < 0 {
			rangeItem[0] = 0
		}
		if rangeItem[1] > (n-1)*defaultDistance {
			rangeItem[1] = (n - 1) * defaultDistance
		}

		for i1 := rangeItem[0]; i1 < rangeItem[1]; i1++ {
			list[i1] = 1
		}
	}

	lingtingDistance := 0
	for _, v := range list {
		if v == 1 {
			lingtingDistance++
		}
	}

	fmt.Println((n-1)*defaultDistance - lingtingDistance)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值