Noble Badass Ответов: 3

Точные вращения, необходимые для преобразования S в T


Учитывая две строки S и T , мне разрешено выполнить 2 операции. 1:удалите первый символ строки S и 2. Добавьте какой-нибудь символ в конце строки. Как я могу найти количество операций необходимых для преобразования S в T. я совсем новичок так что будьте добры помогите мне

вход:
7
aaxaabc
aabcaax

выход: 3

Но я не получаю 3 в качестве своего выхода

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

<pre>
#include<bits/stdc++.h>
using namespace std;
int main(){
    long long n;
    cin>>n;
    char a[n];
    char b[n];
    char c[n];
    cin>>a>>b;
    char temp;
    int count=0;

    for(int i=0;i<n;i++){
        temp=a[0];
        a[i]=a[i+1];
        c[i]=a[i+1];
        c[n-1]=temp;
        
        if(strcmp(b,c)==0)
        break;
        else
        {
            count++;
            continue;
        }

    }
    
        cout<<count;
        cout<<endl;

}

Patrice T

"Но я не получаю 3 в качестве своего выхода"
И каков же ваш результат ?

Noble Badass

7

Patrice T

Это означает, что ваш код никогда не найдет совпадения.

3 Ответов

Рейтинг:
2

OriginalGriff

Это твое домашнее задание, так что я не собираюсь давать тебе никакого кода!
Вместо этого я объясню, как это сделать.
Начните с того, что придумайте две строки, одну под названием S и одну под названием T. запишите их на листе бумаги, с T вверху и s под ним.

Теперь взгляните на первый символ S: это то же самое, что и первый символ T?
Если это не так, вам нужно будет удалить его.
Если да, то есть ли еще один символ в S?
Если есть, то это то же самое, что и второй символ в T? Если это не так, то первый символ нужно будет удалить.
Если это так, продолжайте смотреть на обе строки, пока не получите разницу (удалите первый символ S) или не закончите символы S (отлично!)

Если при сопоставлении у вас закончились символы S, вам нужно добавить N символов из T, чтобы получить совпадение.
Если вы дошли до конца S перед сопоставлением, вам нужно удалить все S и добавить все T.

Попробуйте это на бумаге, и вы поймете, что я имею в виду. Попробуйте сделать это с помощью S = "ABBA", T = "BAT"

Когда вы знаете, сколько удалить и сколько добавить, вы закончили.
Теперь переведите это в псевдокод, а затем Закодируйте и протестируйте его.
Это не так уж сложно, если вы просто хорошенько подумаете, прежде чем начать кодировать, Честное слово!


Noble Badass

Эй , большое спасибо человеку за решение , и я попробовал код, основанный на том, что вы сказали ранее, и все же я не получаю желаемого результата, где я могу опубликовать свой новый код ?

И эти две операции заключаются в том, чтобы удалить первый символ и добавить любой символ к последнему, а не удалить первый символ или добавить любой символ к последнему

Рейтинг:
2

Patrice T

Вы уверены насчет описания ?

Цитата:
Мне разрешено сделать 2 операции. 1:удалите первый символ строки S и 2. Добавьте любой символ в конце строки.

Это не вращение: из "aaxaabc", 3 раза операция 1 делает "aabc" из описания.

Цитата:
Но я не получаю 3 в качестве своего выхода

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

Я подозреваю, что ваш код вращается неправильно.
-----
Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

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

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

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

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

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


Рейтинг:
0

CPallini

Я предполагаю, что вы говорите о фактических вращениях струн (как следует из названия). Обратите внимание, что они отличаются от описанных вами "разрешенных операций". Попробуй

using namespace std;


int check_rotate( char a[], char b[], size_t len)
{
  size_t n;
  for (n=0; n < len; ++n)
  {
    // compare
    if ( strncmp( a, b, len ) == 0 ) break;

    // rotate b
    char tmp = b[0];
    for ( size_t k=0; k<len-1;++k)
      b[k] = b[k+1];

    b[len-1] = tmp;

  }
  if ( n == len) return -1; // no match

  return (n <= len / 2 ? n : len-n); // return the minimum rotations required
}

int main()
{

  char a[] = "aaxaabc";
  char b[] = "aabcaax";
  const size_t len = sizeof(a)-1;

  int rot =  check_rotate(a,b,len);

  if ( rot >= 0)
    cout << "required rotations " << rot << endl;
  else
    cout << "no luck" << endl;
}