UVa1339古老的密码题解

2023-12-07 19:45
文章标签 密码 题解 古老 uva1339

本文主要是介绍UVa1339古老的密码题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

给你两个字符串,看你能不能将第一个字符变化位置(重排),变成和第二个字符串的26个字母一一对应。
解题思路:将两个字符串的各个字符的数量统计出来,如果各个字符串的数量都是一样的,那么就输出yes,否则输出no

题目分析

对题目整体进行分析,字母可以重新排列,所以字母的位置是不重要的,重要的是每个字母出现的次数,只需要将两个字符串每个字母出现的次数进行统计,然后排序一次比较字幕出现的次数是否相同,即可得出两个字符串是否可以互相变化。

代码 

#include<stdio.h>
#include<string.h>
#include<memory.h>
void swap(int* a,int* b){//交换 int t;t=*a;*a=*b;*b=t;
}
int partition(int a[],int p,int q){//快速排序partition过程 int x=a[q];int i=p-1,j;for(j=p;j<q;j++){if(a[j]<x){swap(&a[++i],&a[j]);}}swap(&a[++i],&a[q]);return i;
}
void quicksort(int a[],int p,int q){//快速排序 int m=partition(a,p,q);quicksort(a,p,m-1);quicksort(a,m+1,q);
}
int main(){char a[105],b[105];//定义两个字符串 int countA[26],countB[26];//记录每一个字母出现的次数 memset(a,0,sizeof(a));memset(b,0,sizeof(b));while(scanf("%s%s",a,b)==2){memset(countA,0,sizeof(countA));memset(countB,0,sizeof(countB));int len=strlen(a);int i;for(i=0;i<len;i++){//统计每个字母出现的次数 countA[a[i]-'A']++;countB[b[i]-'A']++;}quicksort(countA,0,25);quicksort(countB,0,25);for(i=0;i<26;i++){//如果相应位置的字母出现的次数不同,尽管映射也不可能匹配 if(countA[i]!=countB[i]){break;}}if(i==26){//最终执行完循环没有退出,完全匹配 printf("yes");}else{printf("no");}}
} 

这篇关于UVa1339古老的密码题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/467136

相关文章

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

mysql重置root密码的完整步骤(适用于5.7和8.0)

《mysql重置root密码的完整步骤(适用于5.7和8.0)》:本文主要介绍mysql重置root密码的完整步骤,文中描述了如何停止MySQL服务、以管理员身份打开命令行、替换配置文件路径、修改... 目录第一步:先停止mysql服务,一定要停止!方式一:通过命令行关闭mysql服务方式二:通过服务项关闭

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html