2020.4.22普及C组 潜伏者(spy) 【纪中】【模拟】

47 篇文章 0 订阅

本题

模拟

即可

按照题目的判断方法:

  1. 所有信息扫描完毕,‘A’-‘Z’ 所有 26 个字母在原信息中均出现过并获得了相应的“密字”。

这个做两次:一次原信息,一次加密过的信息

for(int i=1; i<=27; i++) 
	 if(a2[i]==0)   //如果有一个字母没有
	  {
	    cout<<"Failed";
		return 0;
	  }

2.原信息和加密过的信息长度不一样

if(strlen(a)!=strlen(b))
	 {
	   cout<<"Failed";
	   return 0;
	 }
  1. 扫描中发现掌握的信息里有明显的自相矛盾或错误(违反S 国密码的编码规则)。例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。

注意:这个要做两次,一次是原信息,一次是加密过的信息

原信息的:

for(int i=1; i<=strlen(b+1); i++) 
	 if(b2[b[i]-64]==0)
	   b2[b[i]-64]=a[i];

加密过的:

for(int i=1; i<=strlen(a+1); i++)
     if(a2[a[i]-64]==0)  //储存原来的
	   a2[a[i]-64]=b[i];
     else if(a2[a[i]-64]!=b[i]) //原来和这次不一样
	   {
	     cout<<"Failed";
		 return 0;
	   }


我这样讲可能有点不清楚,那就综合起来吧!

A C   C o d e AC~Code AC Code

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
char a[1010],a2[1010],b[1010],b2[1010],c[1010];
int main() 
{
    freopen("spy.in","r",stdin);
    freopen("spy.out","w",stdout);
    gets(a+1);gets(b+1);gets(c+1);
    if(strlen(a)!=strlen(b))
	 {
	   cout<<"Failed";
	   return 0;
	 }
    for(int i=1; i<=strlen(a+1); i++)
     if(a2[a[i]-64]==0)  //储存原来的
	   a2[a[i]-64]=b[i];
     else if(a2[a[i]-64]!=b[i]) //原来和这次不一样
	   {
	     cout<<"Failed";
		 return 0;
	   }
   for(int i=1; i<=27; i++) 
	 if(a2[i]==0)   //如果有一个字母没有
	  {
	    cout<<"Failed";
		return 0;
	  }
    for(int i=1; i<=strlen(b+1); i++) 
	 if(b2[b[i]-64]==0)
	   b2[b[i]-64]=a[i];
    for(int i=1; i<=27; i++) 
	 if(b2[i]==0)   //同上
	  {
	    cout<<"Failed";
		return 0;
	  }
    for(int i=1; i<=strlen(c+1); i++) 
	   cout<<a2[c[i]-64];
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值