首页 > 试题广场 >

小陆所在的公司实行周末单双休,即一周只休周日,下一周休周六日

[问答题]

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

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

#include<stdio.h>

int main(){
  int date,year,month,day;
  scanf("%d",&date);
  year=date/10000;
  month=date%10000/100;
  day=date%100;
  int z[7]={7,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;
  int zhou=7;
  int t=0;
  if(date>20160814) //双休周日
  {
      while(year!=2016||month!=8||day!=14){
        day--;
        t++;
        if(day<1){
                month--;
            day=mon[month];
        }
        if(month<1){
            year--;
            month=12;
            if(year%100!=0&&year%4==0||year%400==0)
             mon[1]=29;
             else
             mon[1]=28;
        }
      }
      //---------------------------------------
  if(t%7!=0){
    dou=t/7+1;
  }else{
    dou=t/7;
  }
    dou=dou%2; //0为双休1为单休
    zhou=t%7;  //周几,0为周日
   // printf("dou=%d zhou=%d",dou,zhou);



  }else{  //20160814之前
  while(year!=2016||month!=8||day!=14){
        day++;
        t++;
        if(day>mon[month]){
                month++;
            day=1;
        }
        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=z[t%7];  //周几,0为周日
  //  printf("dou=%d zhou=%d",dou,zhou);


  }
  //printf("%d %d %d",year,month,day);
 // printf("t=%d",t);

  if(dou==1){
    if(zhou!=6)
        printf("工作");
    else
        printf("休息");
    }else if(dou==0){
    if(zhou==0||zhou==6){
        printf("休息");
    }else
        printf("工作");
    }
}

发表于 2019-08-27 16:37:12 回复(0)
/*思路 首先给的日期是一个字符串 建立一个日期类Date 内含属性 年月日 构造函数将字符串转为年月日
 * 然后(日期 - 给定日期) 得到的总天数取余14结果为6 12 13的日子为休息日
 * 其中有两个注意点 一个是闰年二月天数+1 一个是计算日期差值天数为旧年天数 加上 新年天数 */ 
class Date
{
public:
  Date();
  Date(QString str)
  {
      int n1=1000;
      int n2=10;
      int n3 =10;
      QString strTemp;
      numYear = 0;
      numMonth = 0;
      numDay = 0;

      int i;
      for(i=0;i<4;i++)
      {
          strTemp = str[i];
          numYear += strTemp.toInt()*n1;
          n1/=10;
      }
      for(i=4;i<6;i++)
      {
          strTemp = str[i];
          numMonth += strTemp.toInt()*n2;
          n2/=10;
      }
      for(i=6;i<8;i++)
      {
          strTemp = str[i];
          numDay += strTemp.toInt()*n3;
          n3/=10;
      }
  }
//计算差值
  int getDay(Date* d)
  {
      int sum=0;
      switch (d->numMonth)
      {
      case 12:
          sum+=30;
      case 11:
          sum+=31;
      case 10:
          sum+=30;
      case 9:
          sum+=31;
      case 8:
          sum+=31;
      case 7:
          sum+=30;
      case 6:
          sum+=31;
      case 5:
          sum+=30;
      case 4:
          sum+=31;
      case 3:
          sum+=getYearDays(d->numYear)-365+28;
      case 2:
          sum+=31;
      case 1:
          sum+=0;
      }
      sum+=d->numDay;
      //以上为求出该年的新年天数
        
      if(d->numYear == 2016)
      {
        return sum - 227;//227为20160814的该年的前八个+14天的天数
      }
      else if(d->numYear>2016)
      {
          for(int i=2017;i<d->numYear;i++)
          {
              sum+=getYearDays(i);
          }
          sum+=365-227;
      }
      return sum;//返回日期和给定日期的总差值天数
  }

  //判断闰年
  int getYearDays(int year)
  {
      if((year%4 == 0 && year %100!=0) || (year%400 == 0))
      {
          return 366;
      }
      else
      {
          return 365;
      }
  }

  bool isRest(Date *one)
  {
      switch(one->getDay(one)%14)
      {
      case 6:
      case 12:
      case 13:
          qDebug()<<one->getDay(one);
          return true;
      default:            return false;
      }
  }
private:
  int numYear;
  int numMonth;
  int numDay;

};

//调用
void MainWindow::on_pushButton_clicked()
{
  Date *d1 = new Date("20210920");
  qDebug()<< d1->isRest(d1);
}


发表于 2021-09-15 16:45:31 回复(0)