这个程序遇到了很多意想之外的问题。
1、本来的想法是将所有相关事件计算出来放到数组里,然后读取各个数组的[12]来得到结果。这个时候看到了
Don't just precompute the answers, either, please.
然后我就傻了,居然完全没有什么办法解决问题...后来看了解题思路才知道,可以实时计算各个月份or年份的啊!思路太狭隘!
2、月份折算的算法遇到了很大的问题。试了很多方法都没有找到正确的解法。先记录一下:
(1)先看同一月份里的: 比如1月1日是周一,那么1月8日还是周一,1月9日是周二。即num_of_week=(n%7+num_of_week)%7;需要注意的是,num_of_week=0的情况代表的是周日!
(2)1月1日到2月1日是31天哦亲~
(3)在输入数字部分遇到了很大的问题。先说说通过编译的写法:
ifstream OpenFile("friday.in");
int num_of_year;
OpenFile>>num_of_year;
下面是没有通过编译的写法:
ifstream OpenFile("friday.in");
string s;
OpenFile>>s;
OpenFile.close();
int num_of_year;
char *num;
num=new char(s.length()+10);
strcpy(num,s.c_str());
num_of_year=atoi(num);
在主机端这种写法是可以的,所以不知道为什么老是报错。错误如下:
> Run 1: Execution error: Your program had this runtime error: Illegal file open (/dev/tty). The program ran for 0.000 CPU seconds before the error. It used 3496 KB of memory. ------ Data for Run 1 [length=2 bytes] ------ 1 ----------------------------
后来经过更改,变成了下面写法通过编译:
string s;
OpenFile>>s;
OpenFile.close();
int num_of_year;
num_of_year=atoi(s.c_str());
与上面的代码比较可以发现,他们的不同在于是否通过char *类型的num来过渡一下。通过编译的写法是没有进行过渡的。