判断是否是工作日,不考虑节假日

小陆所在的公司实行周末单双休,即一周只休周日,下一周休周六日,如此轮换。已知2016年8月13-14日是双休,输入年月日,以yyyymmdd的格式,如20160814,输出当天是否休息,(不考虑法定节假日)

要求:不能使用时间、日期相关的库函数

#include
#include
using namespace std;

int main(){
  string inputString;
  long date;
  cin>> inputString;
  int year,month,day;
  int pos = 0;
  //去除字符串中的逗号
  while((pos=inputString.find(","))!=-1){
      inputString.erase(pos,1);
  }
  //将字符串转换为10进制int型
  date = stoi(inputString,0,10);
  //从日期中提取年月日
  year=date/10000;
  month=date%10000/100;
  day=date%100;
  int weekAfter[7] = {0,1,2,3,4,5,6};
  int weekBefore[7] = {0,6,5,4,3,2,1};
  int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  //判断闰年
  if(year%100!=0&&year%4==0||year%400==0)
    mon[1]=29;
  else
    mon[1]=28;
  int dou=2;  //记录单休双休,0双休,1单休
  int zhou=7; //记录是周几,7周日
  int t=0; //记录week中的下标
  if(date>20160814) //双休周日
  {
      while(year!=2016||month!=8||day!=14){
        day--;
        t++;
        if(month > 8 && day<1){
            day=mon[month];
            month--;
        }else if(year > 2016 && month<1){
            year--;
            month=12;
            if(year%100!=0&&year%4==0||year%400==0)
                mon[1]=29;
            else
                mon[1]=28;
        }
      }
      printf("%d\n",t);
      if(t%7!=0){
        dou=t/7+1;
      }else{
        dou=t/7;
      }
      dou=dou%2; //0为双休1为单休
      zhou=weekAfter[t%7];  //周几,0为周日,6周六,5周五……
  }else if(date<20160814){  //20160814之前
      while(year!=2016||month!=8||day!=14){
          day++;
          t++;
          if(day > mon[month]){
              month++;
              day=1;
          }else if(month>12){
              year++;
              month=1;
              if(year%100!=0&&year%4==0||year%400==0)
                 mon[1]=29;
              else
                 mon[1]=28;
          }
      }
      if(t%7!=0){
        dou=t/7;
      }else{
        dou=t/7;
      }
      dou=dou%2; //0为双休1为单休
      zhou=weekBefore[t%7];  //周几,0为周日
  }else{
      dou = 0;
      zhou = 0;
  }

  if(dou==1){  //单休
    if(zhou!=0) //不是周日
        cout<<"工作"<<endl;
    else
        cout<<"休息"<<endl;
  }else if(dou==0){ //双休
    if(zhou==0||zhou==6){ //是周日或周六
        cout<<"休息"<<endl;
    }else
        cout<<"工作"<<endl;
    }
}

你可能感兴趣的:(OJ训练)