HUAWEI 机试题:出勤奖的判断

Scala 实现

题目描述:

  • 公司用一个字符串来标识员工的出勤信息。
    • absent: 缺勤
    • late: 迟到
    • leaveearly:早退
    • present: 正常上班
  • 现需根据员工出勤信息,判断本次是否能获得出勤奖。
  • 能获得出勤奖的条件如下:
    1. 缺勤不超过1次
    2. 没有连续的迟到/早退
    3. 任意连续7次考勤 缺勤/迟到/早退 不超过3次

输入描述:

  • 用户的考勤数据字符串记录条数 >=1,输入字符串长度 <10000,不存在非法输入。

输出描述:

  • 根据考勤数据字符串,如果能得到考勤奖输出true否则输出false。

示例

输入:

  • 2
  • present
  • present present

输出:

true true

输入:

  • 2
  • present
  • present absent present present leaveearly present absent

输出:

  • true false

代码:

def main(args: Array[String]): Unit = {

    // 获取输入
    val num = StdIn.readLine().toInt

    // 记录输出
    var res = new StringBuffer()

    // 针对每条出勤进行判断

    for (i <- 1 to num) {

        // 用于跳出循环
        Breaks.breakable {

            // 获取出勤信息
            val info = StdIn.readLine().split(" ").toList

            // 1.缺勤不超过1次
            val absentNum = info.toStream.count(_.equals("absent"))
            if (absentNum > 1) {
                res.append("false ")
                Breaks.break() // 跳出循环
            }

            // 2.没有连续的迟到/早退
            for (j <- 0 to info.length - 2) {

                var cur = info(j)
                var next = info(j + 1)

                // 判断连续出现的情况
                if (("late".equals(cur) | "leaveearly".equals(cur)) & ("late".equals(next) | "leaveearly".equals(next))) {
                    res.append("false ")
                    Breaks.break() // 跳出循环
                }
            }

            // 3.任意连续7次考勤 缺勤/迟到/早退 不超过3次
            for (j <- 0 to info.length - 8) {

                // 获取到子串
                var subInfo = new ListBuffer[String]
                for (k <- j to j + 7) {
                    subInfo += info(k)
                }

                // 遍历子串,判断总次数
                var a, b, c = 0
                for (elem <- subInfo) {
                    elem match {
                        case "absent" => a += 1
                        case "late" => b += 1
                        case "leaveearly" => c += 1
                    }
                }

                if (a + b + c > 3) res.append("false ")
                Breaks.break() // 跳出循环
            }

            // 其他则为获得出勤奖的情况
            res.append("true ")
        }
    }

    // 输出结果
    println(res)
}

 


❤️ END ❤️

你可能感兴趣的:(scala)