UD_Lying @ 2018-11-24 23:34:27
首先这里贴的是最后通过的,大佬请直接看错误的地方
#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(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