#arrays #c
Вопрос:
- Утверждение :У вас есть N строк, и длина каждой строки равна. Вы должны сделать все строки равными, если это возможно. Одним движением вы можете выбрать любую строку, удалить первый символ и добавить его в конец строки. Вы можете выполнять эту операцию много раз. Каково минимальное количество операций, которые необходимо выполнить, чтобы сделать все строки равными? Например , если у вас есть строка
abcdef
, одним движением вы можете преобразовать ее в строкуbcdefa
. - Формат вывода: Выведите минимальное количество ходов, необходимое для того, чтобы все строки были равны, или выведите -1, если нет решения.
- Ограничения : 1 <=T<= 10 : 1 <=N<= 50 : 1 <=str[I]
Я подумал о том, чтобы объединить основную строку, а затем сравнить подстроку, чтобы сначала найти, где она возникает. Но я не могу понять, как найти первое происшествие. В то время как в C .find() можно использовать, как насчет в C?
Я использовал 2D-массивы для ввода n-го числа массивов. Я использовал еще один 2D-массив для хранения связанных строк. Я не могу двигаться дальше, может кто-нибудь, пожалуйста, помогите мне, как я могу решить эту проблему?
#include <stdio.h>
#include <string.h>
int main() {
int t;
scanf("%d", amp;t);
getchar();
while (t--) {
int i, n, j, flag, count;
scanf("%d", amp;n);
char str[n][51];
char con[n][102];
for (i = 0; i < n; i ) {
scanf("%s", amp;str[i]);
}
for (i = 0; i < n; i ) {
strcat(con[i], str[i]);
}
for (i = 0; i < n; i ) {
strcat(con[i], str[i]);
}
}
return 0;
}
Комментарии:
1. Вы слышали об
strstr
этом и помогает ли это в вашем случае?2. Действительно, используйте strstr . Если вам нужна помощь в решении головоломки в целом, пожалуйста, задайте более конкретный вопрос.