您的位置:首页 > 其它

NOIP2012 Vigenère 密码

2016-07-05 16:55 375 查看


上图大家看着是不是有些晕?

上图的转换其实非常简单

万能公式:

hljs mathematica">M=C-K+1 ,M<'A'  M+=26
C=M+K-1 ,C>'Z'  C-=26


接着就是代码了(无视char*+string,开始没有string,后来因为%错了,就改为string存K)

#include<bits/stdc++.h>
using namespace std;
int i;
char s1[2001];
string s2;
int main(){
cin>>s2;
for(i=0;i<s2.size();i++)
if(s2[i]<'a')s2[i]-='A';
else s2[i]-='a';
scanf("%s",&s1);
while(s2.size()<strlen(s1))s2+=s2;
for(i=0;i<strlen(s1);i++)
if(s1[i]<'a'){
s1[i]=s1[i]-s2[i];
if(s1[i]<'A')s1[i]+=26;
}
else{
s1[i]=s1[i]-s2[i];
if(s1[i]<'a')s1[i]+=26;
}
puts(s1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string char