Loading...
krstoilo avatar krstoilo 3 Точки

Въпрос за Judge

Здравейте хора! :)

Можете ли да ми кажете, какво точно означава когато Judge и конзолата на IDE-то се разминават в output-а?

Като си run-вам задачата през IDE-то , output-ът е верен, а като я пусна в Judge - тестовете гърмят.

Конкретно с кода на тази задача, например (Compare Matrices в STL Linear Containers) :

https://pastebin.com/1yQUPg8c

Нещо пропускам някъде в кода ли? frown

Благодаря!

 

Тагове:
0
C++ Fundamentals
galin_kostadinov avatar galin_kostadinov 166 Точки
Best Answer

Привет!

Трябва да зададеш стойности на bool променливите в следната функция:

bool compareMatrices (const vector<vector<int>> & matrix1, const vector<vector<int>> & matrix2,

                      const int & rows1, const int & cols1, const int & rows2, const int & cols2){...}

Пример:

bool elementsEqual = false;

Ако го оставиш така, то не е дефинирано:

bool elementsEqual;

if(...){

elementsEqual = true; - а каква е стойността ако не влезе в if?

}

Трябва да  сложиш else и там да зададеш стойност, каквато да приеме в противен случай. Ако няма да се променя и смяташ, че трябва да си остане първоначалната, то да зададеш първоначална стойност още при декларацията  на променливата да я инициализараш - като цяло е добре да зададеш стойност, така ще имаш дефинирано поведение.

https://stackoverflow.com/questions/23345554/the-differences-between-initialize-define-declare-a-variable

https://www.gamedev.net/forums/topic/572392-c-default-value-for-bool/

Поздрави!

1
03/11/2019 17:41:57
krstoilo avatar krstoilo 3 Точки

Съжалявам, че сто години по-късно,но много благодаря на всички за отговорите! :)
Оправих го и даде 100/100.

На мен това не ми се случва за пръв път из задачите, но сега поне съм наясно къде да гледам по-внимателно!

Супер сте! :)

 

1
Filipbg avatar Filipbg 26 Точки

Цялостно за Judge не знам, ако при всички задачи ти дава грешки. Но конкретно за тази задача съм я решил по този начин без проблем: 

#include <iostream>
#include <vector>
using namespace std;

bool isEqual = 0;
int main()
{
    int array2DRows = 0;
    cin >> array2DRows;
    cin.ignore();
    vector<string> array1(array2DRows);
    vector<string> array2(array2DRows);
    for(int row = 0; row < array2DRows; ++row)
    getline(cin, array1[row]);

    cin >> array2DRows;
    cin.ignore();
    if(array2DRows == array2.size())
    {
        for(int row = 0; row < array2DRows; ++row)
            getline(cin, array2[row]);
    }

    if(array1 != array2)
        isEqual = 0;
    else
        isEqual = 1;
    if(isEqual)
        cout << "equal" << endl;
    else
        cout << "not equal" << endl;
    return 0;
}

Може би проверките ти са прекалено много и по някакъв начин засягат Judge, не знам.

0
j.petrov_90 avatar j.petrov_90 373 Точки

Привет, колежке,

galin_kostadinov правилно ти е отговорил какво се случва.
Нямаш начална стойност на булевата променлива - а правиш проверка с нея.

Затова на различви компютри върви по различен начин.
Натъкнала си се на така наречения бъг - undefined behavior.
 

@Filipbg - няма такова нещо като "Може би проверките ти са прекалено много и по някакъв начин засягат Judge".
Judge ще изпилни това, което ти си му казал да изпълнява. Щом има грешка в поведението - трябва човек да търси грешка в кода си.

Между другото това е едно от любимите оправдания на разработчиците, когато някой им намери бъг в кода, а именно:
"Това работи на моя компютър" :D

Жива и здрава.

1
kolioi avatar kolioi 641 Точки

Това са едни от най-неприятните бъгове, защото трудно се възпроизвеждат. Дори и на един компютър програмата понякога работи, друг път - не. В случая имаме само една неинициализирана променлива, но е възможно да не се извиква дадена функция (или част от кода) и съответно не се променя състоянието на даден обект, т.е. няколко променливи едновременно не се инициализират, а се използват дефолтните им стойности.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.