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 ❤️
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JOEL-T99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值