湘潭大学2023年最后一场c语言期末考试

2024-01-02 18:21:57

说明

我应该是只能做出来一两道简单题,确实自己的水平不高,期末考试不爆零就是胜利

1521 密码

题意

输入两个字符串,第一个字符串是原来的字符串,第二个字符串是加密之后的字符串,一个字母只能对应一个字母,如果有不一样的字母,表示不能加密,输出 No ,否则输出 Yes

输入

3
eric
abcd
aa
ab
ab
aa

输出

Yes
No
No

数据范围

第一行是一个整数T (1≤T≤1000),表示样例的个数。

以后每个样例两行,第一行是明文,第二行是密文,都为只含英文字母的字符串,两者长度相同,且长度不超过1000。

AC 代码

#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 ,只要发现有一个对应关系是不一样的,就做一个标记,跳出循环即可,考试的时候可能就只能做出来这题了哈哈

题目说了就是原文和密码的每一个字符只能一一对应,不然就会难以破解,发生歧义

好像只会写这道题,有点无奈

文章来源:https://blog.csdn.net/L3102250566/article/details/135344256
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。