USACO_friday

这个程序遇到了很多意想之外的问题。

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来过渡一下。通过编译的写法是没有进行过渡的。




     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值