竞赛
考级
法兰西玫瑰
#include<bits/stdc++.h> using namespace std; char m[1005],k[105],ans[1005]; int lenm,lenk,j; bool jud(char x) { return (x>='a'&&x<='z')? true : false; } int main() { gets(k); gets(m); lenm=strlen(m); lenk=strlen(k); for(int i=0,j=0;i<lenm;i++,j++) { if(j>=lenk)j=0; if(jud(m[i])) { if(!jud(k[j]))k[j]+='a'-'A'; ans[i]=m[i]-(k[j]-'a'); if(ans[i]<'a')ans[i]+=26; } else { if(jud(k[j]))k[j]-='a'-'A'; ans[i]=m[i]-(k[j]-'A'); if(ans[i]<'A')ans[i]+=26; } } cout<<ans; return 0; }
鏡流です
#include <bits/stdc++.h> using namespace std; string s,k; int main() { cin>>k; int len=k.size(); for(int i=0;i<=len-1;i++) { if(k[i]>='a' && k[i]<='z') k[i]=k[i]-32; } cin>>s; for(int i=0;i<=s.size()-1;i++) { if(s[i]>='a' && s[i]<='z') { int x=s[i]-'a'; int y=k[i%len]-'A'; s[i]=(x-y+26)%26+'a'; } else if(s[i]>='A' && s[i]<='Z') { int x=s[i]-'A'; int y=k[i%len]-'A'; s[i]=(x-y+26)%26+'A'; } } for(int i=0;i<=s.size()-1;++i) { cout<<s[i]; } return 0; }
kali熊砸
沈思邈
明文字母 = (密文字母-'A' - (密钥字母 - 'A') + 26 ) % 26 + A
ACOI
#include<bits/stdc++.h> using namespace std; char m[1005],k[105],ans[1005];//数组 int lenm,lenk,j;//一开始把这三个变量一块在上一行声明,导致输出不够长。。 bool jud(char x)//判断大小写 { return (x>='a'&&x<='z')? true : false; } int main() { gets(k);//读入 gets(m); lenm=strlen(m); lenk=strlen(k); for(int i=0,j=0;i<lenm;i++,j++)//j变量负责控制密匙数组k的下标 { if(j>=lenk)j=0;//循环使用密匙 if(jud(m[i])) { if(!jud(k[j]))k[j]+='a'-'A';//将k[j]的大写字母转换成小写,因为下面直接利用k[j]进行解码 ans[i]=m[i]-(k[j]-'a');//从m[i]的字母向前(k[j]-'a'位) if(ans[i]<'a')ans[i]+=26;//对超出范围的进行处理 } else { if(jud(k[j]))k[j]-='a'-'A';//将k[j]的小写字母转换成大写 ans[i]=m[i]-(k[j]-'A');//从m[i]的字母向前(k[j]-'a'位) if(ans[i]<'A')ans[i]+=26;//对超出范围的进行处理 } } cout<<ans;//输出答案 return 0; }
Ysjt | 深 ™
yy
Xylophone
我们决不投降
JMZ詹总
准
#include <bits/stdc++.h> using namespace std; char a[27][27]; int main(){ for(int i=1;i<=26;i++) for(int j=1;j<=26;j++) { if(i+j+63<=90) a[i][j]=char(i+j+63); else a[i][j]=char((i+j+63)%91+65); } string k,m,s1=""; cin>>k>>m; while(k.size()<m.size()) k+=k; for(int i=0;i<m.size();i++) { int m1; if(k[i]>='a'&&k[i]<='z') m1=(int)(k[i]-96); else m1=(int)(k[i]-64); char km; if(m[i]>='a'&&m[i]<='z') km=char(m[i]-32); else km=m[i]; for(int j=1;j<=26;j++) { if(a[j][m1]==km) { if(m[i]>='a'&&m[i]<='z') s1+=char(j+96); else s1+=char(j+64); } } } cout<<s1<<endl; }
Voldemort
#include <bits/stdc++.h> using namespace std; string s,k; int len; int main(){ cin>>k; len=k.size(); for(int i=0;i<=len-1;i++) if(k[i]>='a' and k[i]<='z') k[i]=k[i]-32; }
太宗驾到
前言:码小题大
重生之我是菜狗
【解题步骤【核心部分】】 1.计算当前使用的密钥字符索引 2.统一转换为大写计算数值 3.转换为0-25的数值 4.解密计算 【公式:p_num = (c_num - k_num + 26) % 26】 5.恢复字符保留大小写 来自 https://www.acgo.cn/problemset/info/31
信奥--小潘 CPZT ACGO
李哥
提交答案之后,这里将显示提交结果~