日期计算

问题描述
  已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
输入格式
  输入只有一行
  YYYY MM DD
输出格式
  输出只有一行
  W
数据规模和约定
  1599 <= YYYY <= 2999
  1 <= MM <= 12
  1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
  1 <= W <= 7,分别代表周一到周日
样例输入
2011 11 11
样例输出
5
代码不完美,OJ过了91%的测试点

#include <stdio.h>
#include <stdlib.h>
int s1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int s2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int w1[7]={6,7,1,2,3,4,5};
int w2[7]={4,3,2,1,7,6,5};
int isR(int a){
    if(a%100==0){
        if(a%400==0)
            return 1;
    }
   if(a%4==0)
    return 1;
   return 0;

}
int count(int a,int b,int c){
    int i;
    int sum=0;
    for(i=1599;i<a;i++){
        if(isR(i))
            sum+=366;
        else sum+=365;

}
if(isR(a))
{

   for(i=1;i<b;i++){

    sum+=s2[i-1];
   }
    sum+=c;
}
else
{

   for(i=1;i<b;i++){

    sum+=s1[i-1];
   }
    sum+=c;
}
return sum;
}
int week(int a,int b,int c){
    int t1,t2,m;
    t1=count(2011,11,11);
    t2=count(a,b,c);
    if(t2>t1){
        m=((t2-t1)+6)%7;
    return w1[m];
    }
  else  {
        m=((t1-t2)+6)%7;
    return w2[m];

}
}
int main()
{

int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d",week(a,b,c));

   // printf("Hello world!\n");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值