Another Human Ответов: 4

Преобразовать код Python в C++?


Я пытался изменить этот код на C++. Версия python работает, но C++ - нет.

Вопрос:
Given a sequence consisting of 'I' and 'D' where 'I' denotes increasing sequence and 'D' denotes the descreasing sequence. Write a program that decodes the given sequence to construct minimum number without repeated digits.

Sample Input 1:

IDIDII

Sample Output 1:

1325467



Sample Input 2:

DDDD

Sample Output 2:

54321

Это мой код на Python:
s = input()
ans = [1]
count = 0
for i in s:
    if i == 'I':
        count = 0
        k = len(ans)
        ans.append(k + 1)
    else:
        count += 1
        tmp = ans[-1]
        for i in range(-1, -1 - count, -1):
            ans[i] += 1
        ans.append(tmp)
for i in ans:
    print(i, end = "")


Что я уже пробовал:

Это то, что я написал, но это не дает правильного вывода.
#include <bits/stdc++.h>

using namespace std;

vector<int> digits(string s){
    vector<int> ans = {1};
    int count = 0;
    for (char const &c : s){
        if (c == 'I'){
            count = 0;
            int k = ans.size();
            ans.push_back(k + 1);
        }
        else{
            count ++;
            int tmp = ans.back();
            for (int i = ans.size() - 1; i > ans.size() - 1 - count; i--){
                ans[i] += 1;
            }
            ans.push_back(tmp);
        }
    }
   return ans; 
}

int main(){
    string s;
    cin >> s;
    vector<int> ans = digits(s);
    for (int i = 0; i < ans.size(); i++){
        cout << ans[i];
    }
    return 0;
}

Richard MacCutchan

- но он не работает должным образом."
И что это значит?

[no name]

Это не дает ожидаемого результата

Richard MacCutchan

И мы должны догадаться, что это такое?

4 Ответов

Рейтинг:
2

KarstenK

Лучше всего написать простой тестовый код и использовать отладчик для поиска проблем.

Ваш код выглядит хорошо, так что, возможно, это всего лишь одна ошибка. Пусть петля for будет в другом месте.


Рейтинг:
2

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

А поиск случайного кода на одном языке и попытка использовать его в качестве ответа на домашнее задание все равно не увенчаются успехом: перевод никогда не дает хорошего целевого кода.
Вместо этого используйте код Python в качестве спецификации для нового приложения на C++ или лучше напишите свой собственный - таким образом вы узнаете гораздо больше, чем копируя чужую работу и передавая ее как свою собственную ...


[no name]

Я уже опубликовал свой код и искал некоторую помощь, чтобы найти ошибки, а не просто получить переведенную версию

Рейтинг:
14

Another Human

Я нашел проблему, ans.size() следует заменить на int(ans.size ()), так как это целое число без знака, и это приведет к целочисленному недотоку.


Рейтинг:
1

Patrice T

Цитата:
Я пытался изменить этот код на C++. Версия python работает, но C++ - нет.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.