华为OD机试真题2023_Swift_100_日志采集系统

2023-03-07  本文已影响0人  雾中探雪

解题思路
将输入的每一个数字对应的最终得分都算出来,保存在数组里,取最大的值进行输出


// 日志采集系统
   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!)
       }
   }
上一篇 下一篇

猜你喜欢

热点阅读