首页 > 代码库 > codeforces724-A. Checking the Calendar 日期题

codeforces724-A. Checking the Calendar 日期题

首先有这样一个显然的事实,那就是每个月的第一天可以是星期x,x可以取遍1~7

因为日期一直在往后退,总有一年能轮到分割线那天,因为本来其实压根就没有月份的划分,月份划分是人为的

而且我们也不知道开始的时候是从啥时候开始,开始时是星期几,所以也可以大胆假设,

并且要注意题目中没有闰年的这个条件,很重要。。

打代码还遇到一些坑,写到注释里了

string的读入与printf调试的矛盾一直没解决

#include <cstring>
#include <cstdio>
#include <iostream>
//要想使用string 必须包含iostream文件
//否则就会报错
using namespace std;
int monthday[]={0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};    
string name[]={"1","monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"};
//少加了分号,很伤
int get_Index(string p){
    register int i;
    for(i=1;i<=7;++i){
        if(p==name[i]){
            return i;
        }
    }
}
char a[20],b[20];
//读取string 是一个问题
int main(){
    scanf("%s%s",a,b);
    string p[2];
    int index[2];
    p[0]=string(a);//本构造函数长期有效
    p[1]=string(b);//变量赋值前面不加类型,很伤
    index[0]=get_Index(p[0]);
    index[1]=get_Index(p[1]);
    //printf("index %d %d\n",index[0],index[1]);
    register int i,j;
    for(j=2;j<=4;++j){
        int temp=index[0];
        for(i=1;i<=monthday[j];++i){//++i 写成 ++j
            temp++;
            if(temp>7) temp-=7;
        }
        if(temp==index[1]){
            printf("YES\n");
            return 0;
        }
    }
    printf("NO\n");
    return 0;
}

 

codeforces724-A. Checking the Calendar 日期题