Как я могу решить проблему Hackerrank BiggerIsGreaterC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Как я могу решить проблему Hackerrank BiggerIsGreater

Сообщение Гость »


Я новичок в hackerrank, и у меня возникли проблемы с алгоритмом BiggerIsGreater. Я не смог найти никаких проблем с кодом. Я разблокировал один тестовый набор и попробовал некоторые входные данные, но они оказались правильными. Есть ли у вас какие-либо идеи? Он проходит тестовый набор 0-4, но терпит неудачу в тестовом наборе 1-2-3. Пишет, что вызвано прерывание.

При работе со строками лексикографический порядок часто называют алфавитным порядком. Строка больше другой строки, если она находится позже в лексикографически отсортированном списке. Учитывая слово, создайте новое слово, поменяв местами некоторые или все его символы. Это новое слово должно соответствовать двум критериям: Оно должно быть больше исходного слова Это должно быть наименьшее слово, отвечающее первому условию

Описание функции Завершите функцию biglisGreater в редакторе ниже. bigIsGreater имеет следующие параметры: строка w: слово Возврат
[*]строка: наименьшая возможная лексикографически более высокая строка или отсутствие ответа
В приведенном ниже коде моя цель — перебрать каждый символ, кроме последнего. Затем в цикле я создал новый цикл для каждого символа после текущего символа первого цикла в обратном порядке, потому что, если функция еще не сработала, это означает, что символы после символов первого цикла упорядочены. Если есть проблемы с заказом, я заказываю с помощью функции OrderVec. Если символ первого цикла меньше символа второго цикла, это означает, что я могу поменять их местами, и строка будет шестнадцатерично выше. После их замены я упорядочиваю символы, потому что, если после замены символов, строка теперь наверняка больше, но мне нужно минимально возможное. Я имею в виду, что если символ — kmsrn, я поменяю местами n и m символов, и это будет knsrm, и это не самый низкий возможный уровень, поэтому я заказываю часть srm. После их замены я возвращаюсь к упорядоченной строке. Мой родной язык не английский, поэтому извините за грамматические ошибки, английский не идеальный. Кроме того, я изучил std::next_permutation после написания этого кода, но я уже написал код, и мне интересно, что вызвало проблему. Единственная часть, которую я написал, — это функции OrderVec и biglisGreater, остальное уже было закодировано на сайте. Надеюсь, это поможет вам понять проблему и мой код. Спасибо.

#include использование пространства имен std; строка ltrim (константная строка &); строка rtrim (константная строка &); /* * Завершите функцию biggerIsGreater ниже. * * Ожидается, что функция вернет СТРОКУ. * Функция принимает STRING w в качестве параметра. */ void OrderVec(vector& VectorToOrder, вектор& OrderedVec) { // Я нахожу минимальное значение и добавляю OrderedVec, затем // удаляю его из VectorToOrder и сортирую оставшийся вектор, вызывая // функцию еще раз int MinValue = *(min_element(VectorToOrder.begin(), VectorToOrder.end())); OrderedVec.push_back(MinValue); int Индекс = 0; for (size_t i = 0; i < VectorToOrder.size(); i++) { если (VectorToOrder.at(i) == MinValue) { перерыв; } Индекс++; } VectorToOrder.erase(VectorToOrder.begin() + Index); если (VectorToOrder.size() == 1) { OrderedVec.push_back(VectorToOrder.at(0)); возвращаться; } еще OrderVec(VectorToOrder, OrderedVec); } строка большеIsGreater (строка w) { if (w.size() < 2) вернет «нет ответа»; for (size_t FrontLocation = w.size() - 1; FrontLocation > 0; FrontLocation--) { size_t FrontAtDigit = FrontLocation - 1; for (size_t BackAtDigit = w.size() - 1; BackAtDigit > FrontAtDigit; BackAtDigit--) { если (w.at(FrontAtDigit) < w.at(BackAtDigit)) { char temp = w.at(FrontAtDigit); w.at(FrontAtDigit) = w.at(BackAtDigit); w.at(BackAtDigit) = темп; вектор NumbersToOrder{}; for (size_t BackNumbers = w.size() - 1; BackNumbers > FrontAtDigit; BackNumbers--) { NumbersToOrder.push_back(w.at(BackNumbers)); } если (NumbersToOrder.size() > 1) { вектор OrderedVec{}; OrderVec(NumbersToOrder, OrderedVec); for (size_t t = FrontAtDigit + 1; t < w.size(); t++) { статический int х = 0; w.at(t) = OrderedVec.at(x); х++; } } вернуть w; } } } вернуть «нет ответа»; } интервал основной() { ofstream fout(getenv("OUTPUT_PATH")); строка T_temp; getline(cin, T_temp); int T = стои(ltrim(rtrim(T_temp))); for (int T_itr = 0; T_itr < T; T_itr++) { строка ш; getline (cin, w); строковый результат = LargeIsGreater (w); fout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»