Не получается одинаковый вывод в разных IDE - PullRequest
0 голосов
/ 09 мая 2018

Я использую один и тот же код и одни и те же входные данные в моей программе, но получаю разные выходные данные в разных средах.

Вопрос: https://www.codechef.com/FLMOCK01/problems/LAPIN

Мое решение:

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
    int testCase=0;
    cin>>testCase;
    while(testCase>0){

        int i=0,m=0;
        string str;
        cin.clear();
        cin.sync();
        getline(cin, str);
        string str1;
        string str2;
        if((str.size()%2)==0){
            m=str.size()/2;
            str1.resize(m);
            str2.resize(m);
            for(i=0;i<m;i++){
                str1[i] = str[i];
            }
            for(i=m;i<str.size();i++){
                str2[i-m] = str[i];
            }
        }
        else{
            m=floor(str.size()/2);
            str1.resize(m);
            str2.resize(m);
            for(i=0;i<m;i++){
                str1[i] = str[i];
            }
            for(i=m+1;i<str.size();i++){
                str2[i-m-1] = str[i];
            }
        }
        sort(str1.begin(), str1.end());
        sort(str2.begin(), str2.end());
        if(str1==str2){
            cout<<"YES"<<endl;
        }
        else{
            cout<<"NO"<<endl;
        }

        testCase--;
    }
    return 0;
}

Вывод в VS Код и код :: блоки: ДА НЕТ ДА ДА НЕТ НЕТ

enter image description here

Вывод в CodeChef IDE, xCode, ideone: ДА ДА НЕТ ДА ДА НЕТ enter image description here

1 Ответ

0 голосов
/ 09 мая 2018

Ваша программа (правильно) проверяет, содержат ли первая половина и вторая половина строки одинаковый набор символов (игнорируя средний). В этом смысле первая группа выходов (ДА НЕТ ДА ДА НЕТ НЕТ) представляется правильной.

Если вы добавите выходные данные строк, которыми заканчивается программа, вы увидите, что идет не так: https://ideone.com/ap422m

if(str1==str2)
    cout<<"YES " << str1 << "|" << str2 <<endl;
else
    cout<<"NO " << str1 << "|" << str2 <<endl;

Выход:

YES |
YES ag|ag
NO ab|de
YES or|or
YES xy|xy
NO abb|aab

Таким образом, он выполняет правильные проверки, но читает начальную строку, заканчивающуюся как первый ввод. Я бы просто использовал getline(cin, str); в начале, как вы делаете это позже, чтобы этого не произошло.

...