簡體   English   中英

為什么我的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”,這是正確的答案,但是在codeforce自定義測試中,它給出的結果為“ YES”,為什么?

我看到的一個非常明顯的錯誤是沒有初始化變量b25b50

在您的代碼中,您在不斷地遞增和遞減這兩個變量,因此,您的答案每次都會出錯。

我會建議:

int i,n,b25=0,b50=0,temp=0;

您可能會得到正確或錯誤的答案,因為任意值都可以存儲在b25b50 有時它可能滿足“ NO條件,而在其他時候可能滿足“ YES條件。


如果您的變量是靜態的或在文件范圍內,它們將被初始化為0。但是,您的變量是本地定義的,因此其值將不確定,從而調用未定義的行為。

您正在使用未初始化的變量b25b50 ,但是從您的代碼中猜測,您假定它們最初為零。

它們的初始值當前可能因運行而有所不同,因此將其第二次放在這些平台之一上可能會得出不同的結果。 (除非ideone使用BSD或默認情況下內存最初為零的東西)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM