又是令人蛋疼的英文题。。题目大意是给出s1,s2两摞纸牌颜色的顺序,求通过变换后能不能得到要求的顺序。
变换规则是先相互间隔的放成一摞,再从中间分开,在相互间隔的放成一摞......
整体思想就是模拟
代码:
#include<iostream>
#include<string.h>
using namespace std;
char s[200],s1[100],s2[100],s0[200],s3[200];
void work()
{
int i,j,t,m;
cin>>m;
cin>>s1>>s2>>s3;
strcpy(s,s1);
strcat(s,s2);//s1,s2放到s中
strcpy(s0,s);//s备份
for(t=0;strcmp(s,s3)!=0;t++)
{
for (j=0;j<m;j++) s1[j]=s[j];
for (i=0;i<m;i++,j++) s2[i]=s[j];//从中间把s分开
for (i=0,j=0;i<m;i++,j+=2){s[j]=s2[i];s[j+1]=s1[i];}//相互间隔的放成一摞
if (strcmp(s0,s)==0) {t=-1;break;}//形成循环,无法得到指定顺序
}
cout<<t<<endl;
}
int main()
{
int i,n;
cin>>n;
for(i=1;i<=n;i++)
{cout<<i<<' ';
work();
}
return 0;
}