东方博宜OJ 字符串 2.字符串基础 【题解】1387~1480

1387. 简单加密

问题描述

Julius Caesar曾经使用过一种很简单的密码。对于明文中的每个字符,将它用它字母表中后 55 位对应的字符来代替,这样就得到了密文。比如字符 A 用 F 来代替。如下是密文和明文中字符的对应关系。

密文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z;

明文:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U;

你的任务是对给定的密文进行解密得到明文。

你需要注意的是,密文中出现的字母都是大写字母。密文中也包括非字母的字符,对这些字符不用进行解码。

输入

一行,给出密文,密文不为空,而且其中的字符数不超过 200200 。

输出

输出一行,即密文对应的明文。

样例

输入

复制

NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
输出

复制

IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES

#1解法


#include<iostream>
using namespace std;

int main()
{
    char c[210];
    cin.getline(c, 210);
    for(int i = 0; c[i]; i++)
    {
        if(c[i] >= 'A' && c[i] <= 'Z')
        {
            c[i] = (c[i] - 'A' - 5 + 26) % 26 + 'A';
        }
    }
    cout << c;
    return 0;
}


#2题解:

#include <bits/stdc++.h>
using namespace std;
int main() {
	string a;
	getline(cin,a);
	for (int i=0; a[i] != '\0'; i++) {
		if (a[i]>='F' && a[i]<='Z') {
			a[i] = a[i]-5;
		}else if (a[i]>='A' && a[i]<='E') {
			a[i] = a[i]+21;
		}
		cout<<a[i];
	}
    return 0;
}

#3题解:



#include <bits/stdc++.h>
using namespace std;

/*
1.将大写字母解密
2.解密方法
F~Z,解密方法是:-5
A~E,对应V~Z 
*/
string s; 
int main() {
	getline(cin,s);
	//逐个解密
	for(int i = 0;i < s.size();i++){
		//如果是大写字母
		if(s[i] >= 'A' && s[i] <= 'Z'){
			//解密
			if(s[i] >= 'F' && s[i] <= 'Z'){
				s[i] = s[i] - 5;
			} else if(s[i] == 'A'){
				s[i] = 'V';
			} else if(s[i] == 'B'){
				s[i] = 'W';
			} else if(s[i] == 'C'){
				s[i] = 'X';
			} else if(s[i] == 'D'){
				s[i] = 'Y';
			} else if(s[i] == 'E'){
				s[i] = 'Z';
			} 
		}
	} 
	
	cout<<s;
	return 0;
}

'A'~'E',解密为'V'~'Z',也可以直接加上差值。

#include<bits/stdc++.h>
using namespace std;

string s;

int main() {
	getline(cin,s);
	for(int i = 0;i < s.size();i++){
		//如果是大写字母,则解密
		if(s[i] >= 'F' && s[i] <= 'Z'){
			s[i] = s[i] - 5;
		}else if(s[i] >= 'A' && s[i] <= 'E'){
			s[i] = s[i] + ('V' - 'A');
		} 
	}
	
	cout<<s;
	return 0;
}



1480. 找字典码最小的字符串

问题描述

编写程序,针对输入的 𝑁N 个不同的字符串,输出其中字典码最小的字符串。

输入

输入第一行给出正整数 𝑁N ;

随后 𝑁N 行,每行给出一个长度小于 8080 的非空字符串,其中不会出现换行符,空格,制表符。

输出

输出字典码最小的字符串。

样例

输入

复制

5
Li
Wang
Zha
Jin
Xian
输出

复制

Jin

#include <bits/stdc++.h>
using namespace std;

int main(){
	//s:代表字典码最小的字符串,x:代表运算结果 
	string mi,x;
	int n,i;
	cin>>n;
	//先读入一个字符串,作为被比较的对象
	//假设它是字典码最小的字符串 
	cin>>mi; 
	
	//再次读入n-1个字符串,并逐个和mi比较(打擂台)
	for(i = 2;i <= n;i++){
		cin>>x;
		if(x < mi){
			mi = x;
		}
	} 
	
	cout<<mi;
}

#2解法:

#include<bits/stdc++.h>
using namespace std;
 
 
int main()
{
	string mi,x;
	int n;
	cin>>n;
	cin>>mi;
	for(int i=2;i<=n;i++)
	{
		cin>>x;
		if(x<mi)
		{
			mi=x;
		}
	}
	cout<<mi;
}

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值