String 从字符串的末尾剪下m和n个字母,然后找出圈数以返回原始字符串
问题:给定的是一个字符串以及m和n 输入1:原始字符串 输入2:m(小于字符串长度):从字符串的末尾剪切m个字母,然后添加到字符串的开头 输入3:n(小于字符串长度):从上述步骤获得的字符串末尾剪切n个字母,然后添加到该字符串的开头 此过程将继续,需要找出返回原始字符串所需的圈数String 从字符串的末尾剪下m和n个字母,然后找出圈数以返回原始字符串,string,cut,letter,String,Cut,Letter,问题:给定的是一个字符串以及m和n 输入1:原始字符串 输入2:m(小于字符串长度):从字符串的末尾剪切m个字母,然后添加到字符串的开头 输入3:n(小于字符串长度):从上述步骤获得的字符串末尾剪切n个字母,然后添加到该字符串的开头 此过程将继续,需要找出返回原始字符串所需的圈数 def harry(str,m,n): le=len(str) org=str.upper() str=str.upper() 转动=0 对于str中的i: str3=str[-m:]#最后n个字母 str=str.r
def harry(str,m,n):
le=len(str)
org=str.upper()
str=str.upper()
转动=0
对于str中的i:
str3=str[-m:]#最后n个字母
str=str.replace('',)[:-m]
str=str3+str
打印(str)
如果组织!=str:
转弯=转弯+1
str4=str[-n:]
str=str.replace('',)[:-n]
str=str4+str
打印(str)
转弯=转弯+1
如果org==str:
打破
打印(转)
str=输入(“输入字符串”)
m=int(输入(“输入m的值”))
n=int(输入(“输入n的值”))
哈里(北、南、北大街)
获得的产出:
Enter the stringarya
Enter the value of m1
Enter the value of n2
AARY
RYAA
ARYA
2
要获得的原始输出:
3
(返回原始字符串Arya需要3次循环。)
除了这样的单词,我得到了所有单词的输出,特别是当同一个字母连续出现时。
请帮我解决这个问题。事实上,你至少要走一步,看看它们是否相等。所以你的回合应该从1开始 见:
def harry(str,m,n):
le=len(str)
org=str.upper()
str=str.upper()
turn=1#word=input()
m=int(输入())
n=int(输入())
计数=1
单词2=单词[-1*m::]+单词[:len(单词)-m]
#打印(“以开始”,word2)
while(word!=word2):
如果(计数%2!=0):
word2=word2[-1*n::+word2[:len(word2)-n]
其他:
word2=word2[-1*m:][word2[:len(word2)-m]
#打印(“现在字符串”,word2)
计数+=1
打印(计数)
我的方法不同。假设s、n和m是输入长度,我们必须从字符串s的末尾开始剪切,然后将其添加到开头
说明:假设字符串s是“bcdefghijklmnop”,n和m是2和3。切割2个长度字符串后:opbcdefghijklmn在切割3个长度lmnopbcdefghijk后,此过程继续,直到形成原始字符串
以上部分我们都知道
结论:字符串的长度必须可以被n+m(或*)整除,因为您可以看到
它正在形成这样的系列
n+m+n+m+n+m++
所以它要么以n结尾,要么以m结尾
(如果以m结尾,则字符串的长度(n+m)==0)。-->(n+m)*k
答案-->(字符串的长度/(n+m))*2
2在这里是相乘的,因为它包括n和m
否则
*(字符串%(n+m)=n的长度(如果以n结尾)-->(n+m)*k+n
答案-->(字符串的长度/(n+m))*2+1
n额外增加1
这是我的代码:
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)
ls=len(输入())
n=int(输入())
m=int(输入())
x=n+m
如果(ls%x==0):
打印(ls//x#包括
使用名称空间std;
int findmin(字符串s,int m,int n){
int len=s.length();
整数计数=1;
字符串q=s.substr(len-m,m)+s.substr(0,len-m);
int-cut=n;
while(q!=s){
q=q.substr(透镜切割,切割)+q.substr(0,透镜切割);
如果(切割=m){
切割=n;
}
否则{
切割=m;
}
计数++;
}
返回计数;
}
int main(){
int t;
cin>>t;
而(t--){
字符串s;
cin>>s;
int m,n;
cin>>m>>n;
你能给出失败的地方吗?在第二次迭代中,当原始字符串arya在str中获得时,如果条件不增加回合数,则直接进入第二个条件,即回合数仅为2,因为条件在第二次迭代中变为真。(在第9步中,当str=arya在2次迭代后获得时,它不计算相同的次数)。如果不增加回合数,则会跳到打印回合数。希望您清楚。我认为for循环条件不正确。问题在于分配和增加回合值。如果有帮助,请始终通过接受答案来结束您的问题:)。请在答案中添加注释以解释您的想法
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";
}
}