为什么我的 C++ 代码在 ideone 和 codeforces 自定义测试中给出了 2 个不同的输出?
how come my c++ code gives 2 different outputs in ideone and codeforces custom test?
ideone:https://ideone.com/Ba3Nw7
#include <iostream>
using namespace std;
int main() {
int i,n,b25,b50,temp;
cin>>n;
for(i=0;i<n;i++)
{
cin>>temp;
if(temp==25)
b25++;
else if(temp==50)
{
if(b25>0)
{
b25--;
b50++;
}
else
{
cout<<"NO";
return 0;
}
}
else if(temp==100)
{
if(b25>0 && b50>0)
{
b25--;
b50--;
}
else if(b25>2)
b25-=3;
else
{
cout<<"NO";
return 0;
}
}
}
cout<<"YES";
return 0;
}
尝试的测试用例是:
2个
25 100
ideone 上的输出是 "NO",这是正确答案,但在 codeforces 自定义测试中它给出了 "YES",这是为什么?
我看到的一个非常明显的错误是没有初始化变量 b25
和 b50
。
在你的代码中,你不断地递增和递减两个变量,因此,你的答案每次都会出错。
我建议:
int i,n,b25=0,b50=0,temp=0;
您可能得到正确或错误的答案,因为任意值都可以存储在 b25
和 b50
中。有时它可能满足 NO
条件,而其他时候可能满足 YES
条件。
如果您的变量是静态的或在文件范围内,它们将被初始化为 0。但是,您的变量是本地定义的,因此它的值将是不确定的,调用未定义的行为。
您使用的变量 b25
、b50
未初始化,但根据您的代码猜测您认为它们最初为零。
它们的初始值目前可能与 运行 运行 不同,因此将其再次放在其中一个平台上可能会产生更多不同的结果。 (除非 ideone 使用 BSD 或默认情况下内存最初为零的东西)
ideone:https://ideone.com/Ba3Nw7
#include <iostream>
using namespace std;
int main() {
int i,n,b25,b50,temp;
cin>>n;
for(i=0;i<n;i++)
{
cin>>temp;
if(temp==25)
b25++;
else if(temp==50)
{
if(b25>0)
{
b25--;
b50++;
}
else
{
cout<<"NO";
return 0;
}
}
else if(temp==100)
{
if(b25>0 && b50>0)
{
b25--;
b50--;
}
else if(b25>2)
b25-=3;
else
{
cout<<"NO";
return 0;
}
}
}
cout<<"YES";
return 0;
}
尝试的测试用例是: 2个 25 100 ideone 上的输出是 "NO",这是正确答案,但在 codeforces 自定义测试中它给出了 "YES",这是为什么?
我看到的一个非常明显的错误是没有初始化变量 b25
和 b50
。
在你的代码中,你不断地递增和递减两个变量,因此,你的答案每次都会出错。
我建议:
int i,n,b25=0,b50=0,temp=0;
您可能得到正确或错误的答案,因为任意值都可以存储在 b25
和 b50
中。有时它可能满足 NO
条件,而其他时候可能满足 YES
条件。
如果您的变量是静态的或在文件范围内,它们将被初始化为 0。但是,您的变量是本地定义的,因此它的值将是不确定的,调用未定义的行为。
您使用的变量 b25
、b50
未初始化,但根据您的代码猜测您认为它们最初为零。
它们的初始值目前可能与 运行 运行 不同,因此将其再次放在其中一个平台上可能会产生更多不同的结果。 (除非 ideone 使用 BSD 或默认情况下内存最初为零的东西)