标签:
friday解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
据说曾经的黑色星期五是13号?本题让我们看看13号与星期五是否比与别的日子更有缘。
给出非负数n,请告诉我在“1900年1月1日”到“1900+n-1年12月31日”中,星期一到星期天各自有多少个13号。
注意,输出时,顺序是周六、周日、周一、周二、周三、周四、周五,一共7个数,空格隔开。
【数据范围】
n<=400
【输入样例】
20
【输出样例】
36 33 34 33 35 35 34
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
做法很简单,每个月都有13号,所以枚举所有的月份就好了。过程中判断一下平年闰年,保证每月日子别算错就好。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
这题一看非负数,就觉得应该考虑n==0的特殊情况,结果数据里没有,有种被坑的感觉……
这题写完交上去WA,一看发现输出要求是周六放在第一个……
改完交上去又WA,这次怎么也找不出错来,结果要来了DYZ的AC代码,发现自己change函数三个return没写进if的大括号里,手生啊!
顺带说一句,我的代码里对于n==0的特判其实可以略去;而DYZ的代码忘了对n==0特判了,恰好他的代码的确需要对n==0的特判,只能说这数据便宜他了-.-
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
1 /* 2 ID: icedrea1 3 PROG: friday 4 LANG: C++ 5 */ 6 7 #include <iostream> 8 #include <fstream> 9 using namespace std; 10 11 int add[1+12]={ 0,31,28,31,30,31,30,31,31,30,31,30,31 }; 12 13 ifstream in("friday.in"); 14 ofstream out("friday.out"); 15 16 int n,r[7]; 17 18 void change(int y) 19 { 20 if(y%400==0) { add[2]=29; return; } 21 if(y%100==0) { add[2]=28; return; } 22 if(y%4==0) { add[2]=29; return; } 23 add[2]=28; 24 } 25 void work() 26 { 27 cout<<"in work"<<endl; 28 int state=6; 29 for(int y=1900;y<=1900+n-1;++y) 30 { 31 change(y); cout<<"y="<<y<<"\tday="<<add[2]<<endl; 32 for(int m=1;m<=12;++m) 33 { 34 ++r[state]; //cout<<"m="<<m<<"\tstate="<<state; 35 state=(state+add[m])%7; //cout<<"\tadd="<<add[m]<<endl; 36 } 37 } 38 out<<r[6]<<‘ ‘<<r[0]<<‘ ‘<<r[1]<<‘ ‘<<r[2]<<‘ ‘<<r[3]<<‘ ‘<<r[4]<<‘ ‘<<r[5]<<endl; 39 } 40 41 int main() 42 { 43 in>>n; 44 if(n==0) { out<<"0 0 0 0 0 0 0"<<endl; } else work(); 45 in.close(); out.close(); 46 return 0; 47 }
USACO Section1.1 Friday the Thirteenth 解题报告
标签:
原文地址:http://www.cnblogs.com/icedream61/p/4321386.html