关于一道算法题的抱怨

最近没事干,于是在刷天勤论坛创办的一个OJ,题库都是些简单的题,还有各大高校历年的考研上机题,很适合我这种菜鸟。毕竟,没有参加过ACM比赛,也没有受过系统的算法训练。所以也就当成对自己的一种锻炼吧。

刷了一段时间后,逐渐发现一些问题了,有一次,看了题目的条件后,总是感觉不对,因为按照题目的要求算法,根本得不出来指定的输出结果,所以直接改了题目条件试了一下,果然给的条件错误,还好,那只是一个很明显的错误。然而,昨天又遇到一个题目,这回真的无从下手了。

题目描述

给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少?

输入

输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。

输出

可能有多组测试数据,对于每组数据,输出一行,给出一个正整数,是5个数中小于a的数的和。

样例输入

10 1 2 3 4 11

样例输出

10

来源

2008年北京大学图形实验室计算机研究生机试真题

 

题目还算简单,所以很快就写出了代码:

#include 

int main()
{
    int n;
    int temp;
    int result = 0;
    while(scanf("%d", &n) != EOF)
    {
        for(int i = 0; i < 5; i++)
        {
            scanf("%d", &temp);
            if(temp < n)
                result += temp;
        }

        printf("%d\n", result);
    }

    return 0;
}

总共也就20来行,本地用题目的条件调试,也是OK的,但是提交到OJ以后,结果Wrong Answer。

想想之后发现,原来有种情况没有考虑到,如:2 3 3 3 3 3,这种输入的话,根本就没有结果,而我却输出了默认的0,但是又不知道应该输出什么,因为题目压根没提。

所以想想,原来OJ上的题目也是应该出的严密些才对,对于这种特殊情况必须要考虑到,否则做题人根本无从下手;还有就是,多给些输入输出吧,至少让做题人能够检验一些基本的边界条件,否则让人真的很郁闷。

后记:

后来发现了为什么是“Wrong Answer”了,更改后的代码如下:

#include 

int main()
{
    int n;
    
    while(scanf("%d", &n) != EOF)
    {
        int result = 0;
        for(int i = 0; i < 5; i++)
        {
            int temp;
            scanf("%d", &temp);
            if(temp < n)
                result += temp;
        }

        printf("%d\n", result);
    }

    return 0;
}
原因就是那个temp的变量,由于是全局的,造成其所在的内存中残存数据,对后面的用例造成了影响。
posted @ 2013-02-23 13:27  crAzyli0n  阅读(354)  评论(0编辑  收藏  举报