从字符串末尾截取m和n个字母,然后求圈数得到原始字符串
Cut m and n letters from end of string, then find number of turns to get back original string
问题:给定一个字符串,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
(需要3轮才能找回原串Arya。)
除了像这样的单词,我正在获取所有单词的输出,尤其是当相同的字母连续出现时。
请帮我解决这个问题。
其实你至少要走一步看看它们是否相等。所以你的回合应该从 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)
word = input()
m = int(input())
n = int(input())
count = 1
word2 = word[-1*m:] + word[:len(word)-m]
#print("Starting with",word2)
while(word != word2):
if(count%2 != 0):
word2 = word2[-1*n:] + word2[:len(word2)-n]
else:
word2 = word2[-1*m:] + word2[:len(word2)-m]
#print("String now", word2)
count+=1
print(count)
我的方法不同。假设 s、n 和 m 是输入长度,我们必须从字符串 s 的末尾剪切并添加到开头。
解释:假设字符串s为'bcdefghijklmnop',n和m分别为2和3。切割2长度字符串后:opbcdefghijklmn after 3 length lmnopbcdefghijk 并且这个过程一直持续到它形成原始字符串
以上部分大家都知道
结论:字符串的长度必须能被n+m(或*)整除,因为你可以看到
它正在形成这样的系列
n+m+n+m+n+m+.......+
所以它要么以 n 要么以 m 结尾,即
(length_of_string % (n+m)==0) 如果以m结尾。 --> (n+m)*k
答案 --> (length_of_string/(n+m))*2
2 在这里乘以,因为它包括 n 和 m。
其他
*(length_of_string % (n+m)==n) 如果以n结尾。 --> (n+m)*k + n
答案 --> (length_of_string/(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)
希望这对您有用。如果没有那么请评论下来。
#include<bits/stdc++.h>
using namespace std;
int findmin(string s ,int m, int n){
int len=s.length();
int count=1;
string q=s.substr(len-m,m)+s.substr(0,len-m);
int cut=n;
while(q!=s){
q=q.substr(len-cut,cut)+q.substr(0,len-cut);
if(cut==m){
cut=n;
}
else{
cut=m;
}
count++;
}
return count;
}
int main() {
int t;
cin>>t;
while(t--){
string s;
cin>>s;
int m,n;
cin>>m>>n;
cout<<findmin(s,m,n)<<"\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
(需要3轮才能找回原串Arya。)
除了像这样的单词,我正在获取所有单词的输出,尤其是当相同的字母连续出现时。 请帮我解决这个问题。
其实你至少要走一步看看它们是否相等。所以你的回合应该从 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)
word = input()
m = int(input())
n = int(input())
count = 1
word2 = word[-1*m:] + word[:len(word)-m]
#print("Starting with",word2)
while(word != word2):
if(count%2 != 0):
word2 = word2[-1*n:] + word2[:len(word2)-n]
else:
word2 = word2[-1*m:] + word2[:len(word2)-m]
#print("String now", word2)
count+=1
print(count)
我的方法不同。假设 s、n 和 m 是输入长度,我们必须从字符串 s 的末尾剪切并添加到开头。
解释:假设字符串s为'bcdefghijklmnop',n和m分别为2和3。切割2长度字符串后:opbcdefghijklmn after 3 length lmnopbcdefghijk 并且这个过程一直持续到它形成原始字符串
以上部分大家都知道
结论:字符串的长度必须能被n+m(或*)整除,因为你可以看到 它正在形成这样的系列 n+m+n+m+n+m+.......+ 所以它要么以 n 要么以 m 结尾,即
(length_of_string % (n+m)==0) 如果以m结尾。 --> (n+m)*k
答案 --> (length_of_string/(n+m))*2
2 在这里乘以,因为它包括 n 和 m。其他
*(length_of_string % (n+m)==n) 如果以n结尾。 --> (n+m)*k + n
答案 --> (length_of_string/(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)
希望这对您有用。如果没有那么请评论下来。
#include<bits/stdc++.h>
using namespace std;
int findmin(string s ,int m, int n){
int len=s.length();
int count=1;
string q=s.substr(len-m,m)+s.substr(0,len-m);
int cut=n;
while(q!=s){
q=q.substr(len-cut,cut)+q.substr(0,len-cut);
if(cut==m){
cut=n;
}
else{
cut=m;
}
count++;
}
return count;
}
int main() {
int t;
cin>>t;
while(t--){
string s;
cin>>s;
int m,n;
cin>>m>>n;
cout<<findmin(s,m,n)<<"\n";
}
}