
Задача на Python, С любой: На этой неделе на уроках информатики Васе рассказывают про строки.
Вчера Вася узнал, что такое циклический сдвиг: k-й циклический сдвиг строки – это строка, полученная перестановкой первых k символов строки в её конец. В частности, 0-й циклический сдвиг строки – это сама строка. И он написал программу, которая умеет перемещать первый символ строки в её конец k раз, получая таким образом k-й циклический сдвиг строки. Сегодня Васе нужно реализовать разворот строки. Но у Васи тренировка. Ему некогда писать новые сложные программы. Поэтому он задался вопросом: Можно ли циклическими сдвигами развернуть строку? Благодаря своим друзьям Вася узнал, на какой строке (да, всего одной) будет тестировать его программу учитель, у которого нет времени рецензировать код каждого ученика. Поэтому вопрос упростился: Можно ли циклическими сдвигами развернуть строку s? Помогите ему ответить на этот вопрос. Формат входных данных Первая строка содержит одно целое число n (1≤n≤3⋅105) – длина строки s. Во второй строке – сама строка s, на которой будет тестировать программу Васи учитель. Состоит строка s только из строчных латинских букв. Формат выходных данных Если строку нельзя развернуть циклическими сдвигами, то выведите число −1. В противном случае выведите такое целое число k (0≤k Пояснение к примеру 0-й циклический сдвиг строки s равен abac. 1-й циклический сдвиг строки s равен baca. 2-й циклический сдвиг строки s равен acab. 3-й циклический сдвиг строки s равен caba. Развёрнутая строка s равна caba. Единственное подходящее k равно трём. Sample Input: 4 abac Sample Output: 3

Ответы на вопрос

Ответ:
a=int(input())
slovo=input()
count=0
slovo2=slovo[::-1]
if slovo==slovo2:
count=0
else:
while slovo!=slovo2:
if count>=a:
count=-1
break
word=slovo[:1]
slovo=slovo[1:]
slovo+=word
count+=1
print(count)
Объяснение:на Е1 и Е2 подойдет, на е3 нет



Для решения данной задачи можно использовать следующий алгоритм:
- Прочитать входные данные: длину строки
n
и саму строкуs
. - Инициализировать переменную
reversed_string
как пустую строку. - Произвести
n
циклических сдвигов строкиs
и каждый раз добавлять полученную строку вreversed_string
. - Если после
n
циклических сдвиговreversed_string
станет равным исходной строкеs
, то вернуть значениеn
в качестве ответа. - Если после всех циклических сдвигов
reversed_string
не стало равным исходной строкеs
, то вернуть-1
в качестве ответа.
Вот реализация данного алгоритма на языке Python:
pythonn = int(input())
s = input()
reversed_string = ""
for k in range(n):
s = s[1:] + s[0] # Циклический сдвиг строки
reversed_string += s
if reversed_string == s:
print(k + 1)
break
else:
print(-1)
Программа считывает длину строки n
и саму строку s
. Затем выполняет циклический сдвиг строки s
n
раз и добавляет результат в reversed_string
. Если в процессе циклических сдвигов reversed_string
становится равным s
, то программа выводит значение k + 1
и останавливается. Если после всех циклических сдвигов reversed_string
не становится равным s
, программа выводит -1
.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili