ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

中国矿业大学算法概论homework三 A、数据加密

2021-11-04 17:58:35  阅读:188  来源: 互联网

标签:加密 int 变换 密码 中国矿业大学 密文 return homework


A、数据加密

题目描述

密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。
现在要求你用下面给定的方法对数据实现加密。给定长度为n的字符串S(1<=n<=2000,S中只有大写字母)作为明文,要求构造一个字符串T作为密文,起初T是一个空串,之后反复执行以下任意操作
1.从S的头部删除一个字符,加入到T的尾部
2.从S的尾部删除一个字符,加入到T的尾部
最后S会变成空串,T会变成一个长度为n的字符串作为密文。当然并非所有的构造方案都是符合条件的,我们要求构造出的密文T的字典序尽可能小,你能找出这个字典序最小的密文吗?

输入

输入包含多组数据,每组数据占两行,第一行为一个整数n(1<=n<=2000)代表字符串S的长度,第二行为一个长度为n的字符串S代表明文,保证S中只有大写字母

输出

对每组数据,输出一行字符串,代表构造出的字典序最小的密文T

样例输入

6
ACDBCB

样例输出

ABCBCD

题解

#include<iostream>
using namespace std;
int n;
char S[2001];
int seek(int x, int y){
	if(x>=y) return 0;
	if(S[x]< S[y]) return 0;
	else if(S[x]> S[y]) return 1;
	else seek(x+1, y-1);
}
int main(){
	while(cin>>n){
		for(int i=0; i<n; i++){
			cin>>S[i];
		}
		for(int i=0,j=n-1;i<=j;){
			if(S[i]<S[j]) cout<<S[i++];
			else if(S[i]>S[j]) cout<<S[j--];
			else if(!seek(i+1, j-1)) cout<<S[i++];
			else cout<<S[j--];
		}
		cout<<endl;
	}
	return 0;
} 

标签:加密,int,变换,密码,中国矿业大学,密文,return,homework
来源: https://blog.csdn.net/qq_45953999/article/details/121147915

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有