150303节日

来源:互联网 发布:php解析html代码 编辑:程序博客网 时间:2024/05/01 01:32
#include<stdio.h>
#include<string.h>
#define runnian(x) x%100!=0&&x%4==0||x%400==0?1:0
int dayofmonth[13][2]={
  0,0,31,31,28,29,31,31,30,30,31,31,30,30,
  31,31,31,31,30,30,31,31,30,30,31,31
};
struct date{
     int Day,Month,Year;
void next(){
    Day++;
if(Day>dayofmonth[Month][runnian(Year)]){
   Day=1;
Month++;
}
if(Month>12){
   Month=1;
Year++;
}
}
};
int buf[3001][13][32];
int main (){
date t;
int cnt=0;
int a,b,c,y,d,y1,y2,l,i;
t.Year=0;t.Month=1;t.Day=1;
     while(t.Year<3001){
     buf[t.Year][t.Month][t.Day]=cnt;
 t.next();
 cnt++;
}
while(scanf("%d %d %d %d %d",&a,&b,&c,&y1,&y2)!=EOF){//a月 第b个 星期c
 for(y=y1;y<=y2;y++){
      int l;//l是y年a月1号的星期数
  l=((buf[y][a][1]-buf[2016][3][20])%7+7)%7;
  
      int x=b;//注意 每次循环不能改变b的值,而应该交给另一个变量!!!
      d=0;
  l--;
  l=l%7;
      c=c%7;
          while(x!=0){
     d++;
         l++;
         l=l%7; 
  if(l==c){
    x--;
  }
             
  }
  
      if(d>dayofmonth[a][runnian(y)]){
           printf("none\n");
  }
      else{
           printf("%04d/%02d/%02d\n",y,a,d);
  }
 }




}
 
return 0;

}

/*思路:求出每年第a个月第一天星期几(利用和已知星期几的日期的差值  与7做运算)
        然后依次计数直到找到第b个星期c
  */

0 0
原创粉丝点击