题意:将两个字符串模拟洗牌的操作合并问是否能得打答案,以及中间经过的次数,如果不能则输出-1
思路:这是一道模拟题,所以只需要写一个模拟操作,不断循环即可。同时还要判断循环结束条件(递归结束条件),如果自己手写一个例子的话就会发现其在不超过2*n(n为长度)次数就会洗回来
完整代码:
#include <iostream> #include <cstdio> #include <cstring> #include <string> using namespace std; const int maxn = 1e3; string s1,s2,s12; int n; void dfs(int step, string s){ if(!s.compare(s12)){ cout<<step<<endl; return ; }else if(step>(2*n)){ cout<<-1<<endl; return ; } s.clear(); for(int i=0;i<n;i++){ s.push_back(s2[i]); s.push_back(s1[i]); } s1.assign(s,0,n); s2.assign(s,n,n); dfs(++step,s); } int main(){ int T; cin>>T; int cnt =0; while(T--){ cin>>n; cin>>s1>>s2>>s12; cout<<++cnt<<" "; dfs(0,s2); } return 0; }
POJ - 3087 Shuffle'm Up (简单递归)
原文地址:https://www.cnblogs.com/Tianwell/p/11259069.html
时间: 2024-12-15 07:56:32