Вырежьте m и n букв из конца строки, затем найдите количество витков, чтобы получить исходную строку.

Вопрос: Дана строка, а также m и n.

ввод 1: исходная строка

ввод 2: m (меньше длины строки): вырезать m алфавитов из конца строки, а затем добавить к началу строки.

ввод 3: n (меньше длины строки): вырезать n алфавитов из конца строки, полученной на предыдущем шаге, а затем добавить к началу этой строки.

Этот процесс продолжается, нужно узнать количество оборотов, которое требуется, чтобы получить исходную строку.

def harry(str, m, n):
    le = len(str)
    org = str.upper()
    str = str.upper()
    turn = 0
    for i in str:
        str3 = str[-m:] # last n letters
        str = str.replace(' ', '')[:-m]
        str = str3 + str
        print(str)
        if org != str:
            turn = turn + 1
            str4 = str[-n:]
            str = str.replace(' ', '')[:-n]
            str= str4 + str
            print(str)
            turn = turn + 1
        if org == str:
            break
    print(turn)

str = input("Enter the string")
m=int(input("Enter the value of m"))
n=int(input("Enter the value of n"))
harry(str, m, n)

полученный результат:

Enter the stringarya
Enter the value of m1
Enter the value of n2
AARY
RYAA
ARYA
2

исходный результат, который необходимо получить:

3 

(Чтобы вернуть исходную строку Arya, требуется 3 хода.)

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


person Sree    schedule 29.05.2020    source источник
comment
можешь подсказать где не получается?   -  person Pygirl    schedule 31.05.2020
comment
Во второй итерации, где исходная строка arya получается в str , она напрямую переходит ко второму условию if без увеличения поворота, т.е. поворот равен только 2, потому что условие становится истинным во второй итерации. (На 9-м шаге, когда str=arya равно получается после 2-х итераций, это не в счет же). Без увеличения поворота он переходит к печати поворота. Надеюсь, вам понятно. Я думаю, что условие цикла неверно.   -  person Sree    schedule 02.06.2020
comment
Проблема заключается в назначении и увеличении значения хода.   -  person Pygirl    schedule 02.06.2020
comment
Всегда закрывайте свой вопрос, принимая ответ, если это помогает :).   -  person Pygirl    schedule 02.06.2020


Ответы (3)


На самом деле вы сделаете хотя бы один шаг, чтобы увидеть, равны они или нет. Таким образом, ваш ход должен начинаться с 1.

См.: https://ide.geeksforgeeks.org/Hw4AWx1O95.

def harry(str, m, n):
    le = len(str)
    org = str.upper()
    str = str.upper()
    turn = 1 # <--------Here
    for i in str:
        str3 = str[-m:] # last n letters
        str = str.replace(' ', '')[:-m]
        str = str3 + str
        print(str)
        if org != str:
            turn = turn + 1
            str4 = str[-n:]
            str = str.replace(' ', '')[:-n]
            str= str4 + str
            print(str)
        if org == str:

            break
        turn = turn + 1 #< --------------- Here 

    print(turn)

str = input("Enter the string\n")
m=int(input("Enter the value of m\n"))
n=int(input("Enter the value of n\n"))
harry(str, m, n)
person Pygirl    schedule 02.06.2020

Мой подход отличается. Предположим, что s, n и m — входная длина, которую мы должны отрезать от конца строки s и добавить к началу.

Объяснение: Предположим, что строка s равна 'bcdefghijklmnop', а n и m равны 2 и 3. После обрезки строки длиной 2: opbcdefghijklmn после длины 3 lmnopbcdefghijk, и этот процесс продолжается до тех пор, пока он формирует исходную строку

Над частью мы все знаем

Вывод: длина строки должна делиться на n+m (или *), потому что вы можете видеть, что она образует серию, подобную этой n+m+n+m+n+m+.....+ Так что она либо заканчивается с n или m, т.е.

  1. (length_of_string % (n+m)==0), если он заканчивается на m. --› (n+m)*k

    answer --› (length_of_string/(n+m))*2
    2 здесь умножается, так как включает n и m оба.

    ЕЩЕ

  2. *(length_of_string % (n+m)==n), если она заканчивается на n. --› (n+m)*k + n

    ответ --› (длина_строки/(n+m))*2 + 1

    1 добавляется дополнительно для n

Это мой код:

ls = len(input())
n=int(input())
m=int(input())
x=n+m
if(ls%x==0):
    print(ls//x<<1)
elif(ls%x==n):
    print((ls//x<<1)+1)

Я надеюсь, что это сработает для вас. Если нет, пожалуйста, прокомментируйте это.

person Rishabh Gupta    schedule 01.12.2020

person    schedule
comment
пожалуйста, добавьте комментарии к своему ответу, чтобы объяснить свою душу - person phoenixstudio; 18.01.2021