您的位置:首页 > 其它

POJ_1107_WsCipher

2015-07-20 15:23 302 查看
题目为简单的模拟。读题比较麻烦其中旋转(rotated)这个表述我认为并不好。这样很难明白当k值大于部分串长度时的处理方式。

#include <iostream>
#include <stdio.h>
using namespace std;

char s[100];
char ss[100];
int s1[100],s2[100],s3[100];

void fu(int str[],int f,int k)
{
int p=0;
for(int i=f-k%f;i<f;i++)  //这里这个k%f是题目的一个坑
{
ss[str[p]]=s[str[i]];
p++;
}
for(int i=0;i<f-k%f;i++)
{
ss[str[p]]=s[str[i]];
p++;
}
}

int main()
{
int k1,k2,k3;
int f1,f2,f3;  //保存三个数组中的位置
int l;//字符串长度
scanf("%d%d%d",&k1,&k2,&k3);
while(k1!=0&&k2!=0&&k3!=0)
{
f1=f2=f3=l=0;
scanf("%s",s);
for(int i=0;s[i]!=0;i++)
{
if('a'<=s[i]&&s[i]<='i')
{
s1[f1]=i;
f1++;
}
else if('j'<=s[i]&&s[i]<='r')
{
s2[f2]=i;
f2++;
}
else
{
s3[f3]=i;
f3++;
}
l++;
}
//此时f1,f2,f3 中有s1,s2,s3的长度信息
//加入的测试cout<<f1<<" "<<f2<<" "<<f3<<" "<<l<<endl;
if(f1)
fu(s1,f1,k1);
if(f2)
fu(s2,f2,k2);
if(f3)
fu(s3,f3,k3);
ss[l]=0;

printf("%s\n",ss);

scanf("%d%d%d",&k1,&k2,&k3);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: