Helping the HR(思维模拟题)

在这里插入图片描述在这里插入图片描述在这里插入图片描述
这道题我一看,那么长…,结果就是一个模拟题;
这道题如果都把他化成秒就很好算了,因为题目有规定输入的时间不会发生冲突;
所以我直接比较秒的大小就行了;
主要是题意的理解:
1.如果在白班换岗,那么就是必须在9:30之前到岗,否则就迟到了;并且在到岗后必须值班至少8个小时
2.如果在晚班换岗,那么就必须在12:30之前到岗,否则就是迟到了;并且在到岗后必须值班至少9个小时
3.在一天内,如果迟到,那么记一分,如果没有值到相应的时间那么就会记一分,但是有个特列在题目中说了:如果一天内,迟到+没有值到应有时间的班那么只记一分;
如果总的计分>3了,那么就是输出:
Issue Show Cause Letter
如果总计分<=3,那么就输入相应的值;
如果总计分为0了,那么就输出All OK;
所以这就是一道英语阅读题;
AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int endt,startt;//每个天对应的开始时间和结束时间
int _9_30=34200,_8_30=30600;
int _8=28800,_9=32400;
int _12_30=45000;
void change(string s){//转化时间
    int f1=1,f2=1,f3=1,f4=1,f5=1,f6=1;
   for(int i=s.length()-1;i>=1;i--){
       if(s[i]==':'&&f1){
            f1=0;
            int t=0;
           for(int j=i+1;j<=i+2;j++){
               t=t*10+(s[j]-'0');
           }
         endt+=t;
       }else if(s[i]==':'&&f2){
          int t=0;
          f2=0;
          for(int j=i+1;j<=i+2;j++){
              t=t*10+s[j]-'0';
          }
          endt+=t*60;
       }else if(s[i]==':'&&f3){
            f3=0;
            //找后面第一个:
            int b;
            for(int j=i+1;j<s.length()-1;j++){
                if(s[j]==':'){
                     b=j;break;
                }
            }
            int t=0;
            for(int j=i+1;j<b;j++){
                  t=t*10+s[j]-'0';
            }
            endt+=t*60*60;
        }else if(s[i]==':'&&f4){
            f4=0;
            int t=0;
            for(int j=i+1;j<=i+2;j++){
                t=t*10+s[j]-'0';
            }
           startt+=t;
        }else if(s[i]==':'&&f5){
           f5=0;
            int t=0;
            for(int j=i+1;j<=i+2;j++){
                t=t*10+s[j]-'0';
            }
           startt+=t*60;
         }else if(s[i]==':'&&f6){
           f6=0;
              //找后面第一个:
            int b;
            for(int j=i+1;j<s.length()-1;j++){
                if(s[j]==':'){
                     b=j;break;
                }
            }
            int t=0;
            for(int j=i+1;j<b;j++){
                  t=t*10+s[j]-'0';
            }
           startt+=t*60*60;
         }
   }
}
int main()
{
    int n;
    while(cin>>n){
    if(n==0)break;
    string s;
    int late=0,fail=0;
     int rule=0;
     int letter=0;
    while(n--){
       startt=0;endt=0;
       int late_1=0,fail_1=0;
         cin>>s;
         change(s);
   // cout<<startt<<"   "<<endt<<endl;
        if(s[0]=='D'){
            if(startt<=_9_30){//说明没有迟到
                //因为在_8_30之前不算如时间,所以这里需要比个大小
                int start_t=max(_8_30,startt);
                int sub=endt-start_t;
                if(sub<_8){//说明没有完成至少8个小时的站岗
                    fail_1=1;
                }
            }else{//迟到
                late_1=1;
                int sub=endt-startt;
                if(sub<_8){//说明没有完成至少8个小时的站岗
                    fail_1=1;
                }
            }
        }else {
            if(startt<=_12_30)//说明没有迟到
            {
                int start_t=max(_8_30,startt);
                int sub=endt-start_t;
                if(sub<_9){//说明没有完成9小时的站岗任务
                    fail_1=1;
                }

            }else{
                 late_1=1;
                 int sub=endt-startt;
                 if(sub<_9){
                     fail_1=1;
                 }
            }
        }
        if(late_1&&fail_1){//同一天出现两种情况,那么只记一次分
           late++;
        }else{
          late+=late_1;fail+=fail_1;
        }

     }
     if(late+fail>3)letter=1;
      if(letter){
          printf("Issue Show Cause Letter\n");
      }else if(late||fail){
         printf("%d Point(s) Deducted\n",min(3,late+fail));
      }else{
         printf("All OK\n");
      }
//     if(letter){
//        printf("")
//     }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值