我有以下代码。
CodeBlocks为以下输入输出NO
,但Codeforces输出YES
?
对于以下输入:
1500 1500 1500 1 2 3
,正确的输出是NO
(在CodeBlocks中是正确的),但它输出YES
与Codeforces“编译器”(也称为自定义调用)。
我已经尝试了所有的东西,而且我的想法非常多。
#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;
}
您没有初始化变量,因此最初它们包含随机虚假值。这对于andrewGrapes
,dmitryGrapes
,michalGrapes
,greenGrapes
,purpleGrapes
和blackGrapes
来说不是问题,因为它们将分别由scanf
赋值(假设每次调用成功)。
但是,当andrewCheck
为真时,if (greenGrapes >= andrewGrapes)
将仅被赋值。如果dmitryCheck
为真,则只会为if (greenGrapes + purpleGrapes >= dmitryGrapes)
指定一个值。
如果任何一个或两个条件都不为真,则相应变量将保留其随机伪值,当您继续测试这些变量时,结果将如此。