太过分了!这个一定要发出来好好玩玩!

P1046 [NOIP2005 普及组] 陶陶摘苹果

UD_Lying @ 2018-11-24 23:34:27

这个是来讨论C/C++写这道题出的一个小事故的

首先这里贴的是最后通过的,大佬请直接看错误的地方

#include<iostream>
#define apple_number 10
#define chair_high 30
inline int touch_max(int human_high)
{
    return human_high+chair_high;
}

int main()
{
    int human_high;
    int apple_high[apple_number];
    int i=0;
    int ability_touch_number=0;
    while(i<apple_number)
    {
        std::cin>>apple_high[i];
        i++;
    }
    std::cin>>human_high;
    for(i=0;i<apple_number;i++)
    {
        if(touch_max(human_high)>=apple_high[i])
        {
            ability_touch_number++;
        }
        if(apple_high[i]>200||apple_high[i]<100||human_high>120||human_high<100)
        {
            std::cout<<"fuck you,bitch"<<std::endl;
            return -1;
        }
    }
    std::cout<<ability_touch_number<<std::endl; 
    return 0;
}

这是之前出错的

#include<iostream>
#define apple_number 9
#define chair_high 30
inline int touch_max(int human_high)
{
    return human_high+chair_high;
}

int main()
{
    int human_high;
    int apple_high[apple_number];
    int i=0;
    int ability_touch_number;
    while(std::cin>>apple_high[i],i<apple_number)
    {
        i++;
    }
    std::cin>>human_high;
    for(i=0;i<apple_number;i++)
    {
        if(touch_max(human_high)>=apple_high[i])
        {
            ability_touch_number++;
        }
        if(apple_high[i]>200||apple_high[i]<100||human_high>120||human_high<100)
        {
            std::cout<<"fuck you,bitch"<<std::endl;
            return -1;
        }
    }
    std::cout<<ability_touch_number<<std::endl; 
    return 0;
}

这种代码居然还能得分80分!真是太过分了!

我 _一开始定义的applenumber是10 ,可是发现输入11个数字(包含身高)后并没有输出结果,需要再次输入一个,也就是一共12个数字。

之后才 _把applenumber改为9 ,发现居然可以将题目下面给的输入通过! 之后居然还得分80分,真的被骚到了。

之后检查代码发现了两个大问题:

首先,就是我的while()内写了一个逗号运算符

由于当时写这一段的时候脑抽了,没考虑到顺序,只想到了这个意思,就这么随手写上去了。 于是while被我写成了

while(std::cin>>apple_high[i],i<apple_number)

也就是在判断条件之前就赋值了,这样会在i已经等于apple_number的时候,还会进行一次赋值。 当然,这是不可能赋值到数组占用的房间里面的!

这样按理说应该是不会通过测试的啊!

那么就是第二个问题了 变量初始化!

我这么可爱的家伙怎么可能会犯这样的错呢! 也正是这个错误,把我一开始修改的思路搞乱了。 这个ability_touch_number没有初始化值! 经过可爱的冷静思索发现:

它的初值是1!

它的初值是1!

它的初值是1!

然后就这么把错误答案+1变成了正确答案! 真是bug+bug=debug啊!

当然,修改的方法不只这么一种,写这个的目的也是希望大家注意一下出错的问题,大佬们就当一个笑话来看吧!


by C20212848龙姝羽 @ 2019-01-31 17:45:12

骂人真的好吗

上一页 |