


解题思路
将输入的每一个数字对应的最终得分都算出来,保存在数组里,取最大的值进行输出
![]()
// 日志采集系统
func HW2023013() {
// 测试用例
// let line = "1 2 97"
// let line = "50 60 1"
// let line = "1 98 1"
// let line = "100 100 100"
// let line = "0 0 0"
// 开始代码
let line = String(readLine()!)
let inputArr = line.components(separatedBy: " ").map { Int($0) ?? 0} // 将输入的字符串切割,并转化成数组
var resArr: [Int] = []
for (i, iNum) in inputArr.enumerated() {
if i == 0 {
resArr.append(iNum) // 第一个元素直接保存,因为第一时间上报就得第一个元素的分数
}else {
var tempRes = 0 // 小于i的所有数的总得分
var tempSum = 0 // 小于i的所有数的总和
for (j, jNum) in inputArr.enumerated() {
if j < i {
tempSum += jNum // 累加小于i的所有数
tempRes += (jNum * (i-j)) // 累加小于i的所有数的得分
}else {
break
}
}
if tempSum + iNum >= 100 { // 如果包含i在内的之前所有数总和大于等于100,必须按最大分100来计算
resArr.append(100-tempRes) // 将最终得分计入数组
}else {
resArr.append(tempSum + iNum - tempRes) // 如果包含i在内的之前所有数总和 - 小于i的所有数的总得分 = 最终得分
}
}
}
// 取出数组中最大的得分进行打印
if resArr.count > 0 {
resArr = resArr.sorted(by: >)
print(resArr.first!)
}
}
网友评论