我应该是只能做出来一两道简单题,确实自己的水平不高,期末考试不爆零就是胜利
输入两个字符串,第一个字符串是原来的字符串,第二个字符串是加密之后的字符串,一个字母只能对应一个字母,如果有不一样的字母,表示不能加密,输出 No ,否则输出 Yes
3
eric
abcd
aa
ab
ab
aa
Yes
No
No
第一行是一个整数T (1≤T≤1000),表示样例的个数。
以后每个样例两行,第一行是明文,第二行是密文,都为只含英文字母的字符串,两者长度相同,且长度不超过1000。
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
bool flag=true;
char s1[1010],s2[1010];
scanf("%s%s",s1,s2);
int a[1010],b[1010];
int len1=strlen(s1);
for(int i=0;i<len1;i++)
{
a[s1[i]-'a']=s2[i]-'a';
b[s2[i]-'a']=s1[i]-'a';
}
for(int i=0;i<len1;i++)
{
if(a[s1[i]-'a']!=s2[i]-'a')
{
flag=false;
break;
}
if(b[s2[i]-'a']!=s1[i]-'a')
{
flag=false;
break;
}
}
if(flag) puts("Yes");
else puts("No");
memset(a,0,sizeof a);
}
return 0;
}
建立一个一一对应的关系,可以用下标和数组的数值来进行建立。但是需要注意需要建立两个数组,第一个数组是 s1-> s2 ,第二个数组是 s2->s1 ,只要发现有一个对应关系是不一样的,就做一个标记,跳出循环即可,考试的时候可能就只能做出来这题了哈哈
题目说了就是原文和密码的每一个字符只能一一对应,不然就会难以破解,发生歧义
好像只会写这道题,有点无奈