您的位置:首页 > 其它

poj 1107 --W's Cipher

2010-12-04 23:45 295 查看
这道题主要是计算下标需要注意,这点上合循环队列很相似,(i+k1)%length求出相对位置。

// W's Cipher.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ifstream cin("d://1.txt");
int k1,k2,k3;
char res[100];
int i,j;
string s;
int pos;
vector<int>v1,v2,v3;
while(cin>>k1>>k2>>k3){
if(k1==0&&k2==0&&k3==0)
break;
cin>>s;
v1.clear();
v2.clear();
v3.clear();
for(i=0;i!=s.size();i++){
if(s[i]>='a'&&s[i]<='i')
v1.push_back(i);
else if(s[i]>='j'&&s[i]<='r')
v2.push_back(i);
else v3.push_back(i);
}
for(i=0;i!=v1.size();i++){
pos=(i+k1)%v1.size();
res[v1[pos]]=s[v1[i]];
}
for(i=0;i!=v2.size();i++){
pos=(i+k2)%v2.size();
res[v2[pos]]=s[v2[i]];
}
for(i=0;i!=v3.size();i++){
pos=(i+k3)%v3.size();
res[v3[pos]]=s[v3[i]];
}
res[s.length()]=0;
cout<<res<<endl;
}

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