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; }