杭电OJ---1070_Milk_WA若干次后AC总结



其实题目没多难,可为什么总是WA呢?


  1. 审题错误:题目有这么几句话。
    Here are some rules:
    1. Ignatius will never drink the milk which is produced 6 days ago or earlier. That means if the milk is produced 2005-1-1, Ignatius will never drink this bottle after 2005-1-6(inclusive).
    2. Ignatius drinks 200mL milk everyday.
    3. If the milk left in the bottle is less than 200mL, Ignatius will throw it away.
    4. All the milk in the supermarket is just produced today.

    Note that Ignatius only wants to buy one bottle of milk, so if the volumn of a bottle is smaller than 200mL, you should ignore it.
    Given some information of milk, your task is to tell Ignatius which milk is the cheapest.

    第3条rule说如果瓶子里的牛奶不足200ml,他就会扔掉。后面又说,如果一瓶牛奶的容量小于200ml,你应该忽略它。

    我当时将这两条都理解成后面的意思了。所以算性价比时,被扔掉的部分也算进去了。
    而题目的意思是不应该算的,虽然题目有些不合常理,不足200ml就不喝扔掉不浪费吗?

  2. 输入变量时对应变量顺序错误,调用函数时传递参数的顺序搞混:  

    低级错误,没什么好讲的。这种错误犯了还不易发现。以后要少犯!最好养成边编写边检查细节的习惯。

  3. 强制类型转换使用细节出问题:

    比如:
    cout << (float)(5/2) 输出结果是 2
    cout << (float)5/2 输出结果是2.5
    所以搞不清优先级却又认为大不了多加几个括号的人要注意了,有时候加括号是可以解决问题,但这个例子告诉我们,有时候括号是不能随便加的。
    这样的错误虽然犯的概率不大,但一旦犯了,那就悲剧了。找出这么细微的错误,真心难啊!

  4. 分母不能为零;

    这道题好像不会有多大影响。但这是个很值得注意的问题。
    试着执行一下下面的语句:
    cout << 1.0/0 <<endl;
    cout << 1/0.0 <<endl;
    cout << 1.0/0.0 <<endl;
    cout << (float)1/0 <<endl;
    cout << 1/0 <<endl;
    如果你用的是codeblocks,你会发现前面几个输出的都是inf,只有最后一个系统会报错。

    这也就可以得出下面几个结论:

    算术运算时,只要左右操作数中一个是浮点类型(相对较高的类型),计算机会先将操作数都转换成浮点类型再计算。当然结果也是浮点类型的。

    强制类型转换时,也是将左右操作数先转化成相应的类型再计算。如果操作数是表达式,要先算出结果再转换类型。学过操作符重载就知道,因为左右操作数也是相当于参数传到函数内的,所以要先算出结果再转换类型。


    下面给仍然没AC的同胞几组测试数据,没准就能发现自己的问题所在。

    5
    2
    Yili 10 399
    Mengniu 10 400
    4
    Yili 40 600
    Mengniu 40 9999
    Guangming 1 199
    Yanpai 40 8800
    2
    Yili 3 199
    Mengniu 3 100
    2
    Yili 10 401
    Mengniu 10 400
    2
    Yili 0 399
    Mengniu 0 400

    我AC的程序输出的结果是:
    Yili 10 399
    Mengniu 10 400
    Mengniu
    4
    Yili 40 600
    Mengniu 40 9999
    Guangming 1 199
    Yanpai 40 8800
    Mengniu
    2
    Yili 3 199
    Mengniu 3 100
    Yili
    2
    Yili 10 401
    Mengniu 10 400
    Yili
    2
    Yili 0 399
    Mengniu 0 400
    Mengniu

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
杭州电子科技大学在线评测系统(杭电OJ)中的题目1000-1100是一系列编程题,我将分别进行回答。 1000题是一个简单的入门题,要求计算两个整数的和。我们可以使用一个简单的算法,读取输入的两个整数,然后将它们相加,最后输出结果即可。 1001题是一个稍微复杂一些的题目,要求实现字符串的逆序输出。我们可以使用一个循环来逐个读取输入的字符,然后将这些字符存储在一个数组中。最后,我们可以倒序遍历数组并将字符依次输出,实现字符串的逆序输出。 1002题是一个求最大公约数的问题。我们可以使用辗转相除法来解决,即先求出两个数的余数,然后将被除数更新为除数,将除数更新为余数,直至两个数的余数为0。最后的被除数就是最大公约数。 1003题是一个比较简单的排序问题。我们可以使用冒泡排序算法来解决,即每次比较相邻的两个元素,如果它们的顺序错误就交换它们的位置。重复这个过程直至整个数组有序。 1100题是一个动态规划问题,要求计算给定序列中的最长上升子序列的长度。我们可以使用一个数组dp来保存到达每个位置的最长上升子序列的长度。每当遍历到一个位置时,我们可以将其和之前的位置比较,如果比之前位置的值大,则将其更新为之前位置的值加1,最后返回dp数组的最大值即可。 以上是对杭电OJ1000-1100题目的简要回答,涉及了一些基本的编程知识和算法思想。希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值