我有以下代码。
CodeBlocks输出NO
用于以下输入,但是Codeforces输出YES
?
对于以下输入:
1500 1500 1500 1 2 3
,正确的输出是NO
(在CodeBlocks中正确),但是它使用Codeforces“编译器”(也称为自定义调用)输出YES
。
我已经尝试了一切,但我完全没有想法。
#include <stdio.h>
#include <string.h>
int main()
{
int andrewGrapes, dmitryGrapes, michalGrapes;
int greenGrapes, purpleGrapes, blackGrapes;
int andrewCheck, dmitryCheck, michalCheck;
// how many grapes they want to eat
scanf("%d", &andrewGrapes); // green grapes only
scanf("%d", &dmitryGrapes); // purple and green
scanf("%d", &michalGrapes); // any grapes
// number of grapes
scanf("%d", &greenGrapes);
scanf("%d", &purpleGrapes);
scanf("%d", &blackGrapes);
if (greenGrapes >= andrewGrapes)
{
andrewCheck = 1;
greenGrapes = greenGrapes - andrewGrapes;
}
if (greenGrapes + purpleGrapes >= dmitryGrapes)
{
greenGrapes = greenGrapes - dmitryGrapes;
purpleGrapes = purpleGrapes - dmitryGrapes;
dmitryCheck = 1;
}
//if (greenGrapes + purpleGrapes + blackGrapes >= michalGrapes)
// michalCheck = 1;
if (andrewCheck == 1)
{
if (dmitryCheck == 1)
printf("YES");
} else printf("NO");
return 0;
}
答案 0 :(得分:1)
您无需初始化变量,因此最初它们包含随机伪造的值。
对于andrewGrapes
,dmitryGrapes
,michalGrapes
,greenGrapes
,purpleGrapes
和blackGrapes
来说,这不是问题,因为它们将分别由{ {1}}(假设每次呼叫成功)。
但是,只有在scanf
为true时,才会为andrewCheck
分配一个值。仅当if (greenGrapes >= andrewGrapes)
为true时,才会为dmitryCheck
分配一个值。
如果任何一个或两个条件都不成立,则相应的变量将保留其随机假值,而当您继续测试这些变量时,结果将是这样。