第一行输入一个长度为
,仅由小写字母构成的字符串
,代表待构建的新字母表底串。
第二行输入一个长度为
,仅由小写字母构成的字符串
,代表需要加密的明文。
在一行上输出一个字符串,代表加密后的密文。
trailblazers attackatdawn
tpptadtpitvh
在这个样例中,加密的操作如下:
对
进行去重
,得到
;
随后从
开始依次在字符串末尾补充
中未出现的字母,得到
;
最后,对于
中的每个字母,替换为
构建得到的新字母表中相同位置的字母。我们可以列出对照表:
最后,对于
中的每个字母,替换为
构建得到的新字母表中相同位置的字母,得到
。
nihao ni
le
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
char[] key = cin.next().toCharArray(),
s = cin.next().toCharArray();
Set<Character> set = new HashSet<>();
char[] table = new char[26];
int k = 0;
for (int i = 0; i < key.length; ++i) {
char c = key[i];
if (!set.contains(c)) {
table[k++] = c;
set.add(Character.toLowerCase(c));
}
}
for (; k < 26; ++k) {
for (int i = 0; i < 26; ++i) {
char c = (char) ('a' + i);
if (!set.contains(c)) {
table[k++] = c;
set.add(Character.toLowerCase(c));
}
}
}
for (int i = 0; i < s.length; ++i) {
boolean up = false;
char c = s[i];
if (Character.isUpperCase(c)) {
up = true;
}
char res = table[c - 'a'];
if (up) {
System.out.print(Character.toUpperCase(res));
}
System.out.print(res);
}
System.out.println();
}
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String key = sc.next();
String pwd = sc.next();
LinkedHashSet<Character> set = new LinkedHashSet<>();
for(char c : key.toCharArray()) {
set.add(Character.toUpperCase(c));
}
for(char c = 'A'; c <= 'Z'; c++) {
set.add(c);
}
ArrayList<Character> list = new ArrayList<>(set);
for(char c : pwd.toCharArray()) {
if(Character.isLowerCase(c)) {//小写
System.out.print(Character.toLowerCase(list.get(c - 'a')));
}else {
System.out.print(Character.toUpperCase(list.get(c - 'A')));
}
}
System.out.println();
}
}
} import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String key = sc.nextLine().toLowerCase();
String s = sc.nextLine();
Set<Character> set = new LinkedHashSet<>();
for (char c : key.toCharArray()) {
set.add(c);
}
for (char c = 'a'; c <= 'z'; c++) {
if (!set.contains(c)) {
set.add(c);
}
}
int k = 0;
char[] arr = new char[26];
for (Character c : set) {
arr[k++] = c;
}
StringBuffer sb = new StringBuffer();
for (char c : s.toCharArray()) {
if (c >= 'a') {
sb.append(arr[c - 'a']);
} else {
sb.append(arr[c - 'A' + 'a'] - 'a' + 'A');
}
}
System.out.println(sb);
}
}
}
import java.util.*;
public class Main{
public static String alpRef = "abcdefghijklmnopqrstuvwxyz";
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
String keyLower = scanner.next().toLowerCase();
String rawString = scanner.next();
Set<String> usefulKeyLower = new LinkedHashSet<>();
usefulKeyLower.addAll(Arrays.asList(keyLower.split("")));
for (int i = 0; i < alpRef.length(); i++){
usefulKeyLower.add(String.valueOf(alpRef.charAt(i)));
}
String newRef = String.join("",usefulKeyLower);
StringBuilder result = new StringBuilder();
for (int i = 0; i < rawString.length(); i++){
int index = Character.toLowerCase(rawString.charAt(i)) - 'a';
if (rawString.charAt(i) - 'a' < 0){
result.append(newRef.substring(index,index+1).toUpperCase());
}else{
result.append(newRef.substring(index,index+1));
}
}
System.out.println(result.toString());
}
}
} import java.util.*;
public class StringCrypt {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str1 = sc.nextLine();//key
String str2 = sc.nextLine();
System.out.println(Encrypt(str1,str2));
}
}
public static String Encrypt(String str1,String str2){
char[] chs = str1.toCharArray();
StringBuilder sb = new StringBuilder();//获取key对应的字母表
for(int i=0;i<chs.length;i++){
if(sb.toString().indexOf(chs[i])==-1){
sb.append(chs[i]);
}
}
for(int i=0;i<26;i++){
if(sb.toString().toUpperCase().indexOf((char)('A'+i))==-1){
sb.append((char)('A'+i));
}
}
//System.out.println(sb.toString());
char[] zero = sb.toString().toCharArray();
char[] chs2 = str2.toCharArray();
StringBuilder sb2 = new StringBuilder();//获取加密后的字符串
for(int i=0;i<chs2.length;i++){
if(chs2[i]>='A'&&chs2[i]<='Z'){
sb2.append(String.valueOf(zero[chs2[i]-'A']).toUpperCase()) ;
}else if(chs2[i]>='a'&&chs2[i]<='z'){
sb2.append(String.valueOf(zero[chs2[i]-'a']).toLowerCase());
}else{
sb2.append(chs2[i]);
}
}
return sb2.toString();
}
}
n=input() m=input() list1=['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'] res='' a=1 for i in n[::-1]: list1.remove(i) list1.insert(0,i) for i in m: a=ord(i)-97 res+=list1[a] print(res)
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
char[] ch = new char[26];
char[] key = sc.next().toLowerCase().toCharArray();
//保证顺序一致的set
Set<Character> set = new LinkedHashSet<>();
//先把key中的插入set
for(int j = 0;j<key.length;j++){
if(!set.contains(key[j])){
set.add(key[j]);
}
}
//再把26个字母补全
for(int i = 0;i<26;i++){
if(!set.contains((char)(i+'a'))){
set.add((char)(i+'a'));
}
}
int count = 0;
//放入数组中,方便用下标直接取值
for(Character c:set){
ch[count++] = c;
}
char[] in = sc.next().toLowerCase().toCharArray();
StringBuilder sb = new StringBuilder();
//计算和‘a’的差值即可直接从数组中取值
for(int k = 0;k<in.length;k++){
sb.append(ch[in[k]-'a']);
}
System.out.print(sb.toString());
}
} import java.util.*;
public class Main01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String key = sc.nextLine().toLowerCase();//后面统一用小写建立键值对
String str = sc.nextLine();
//将key中的字母放进容器
List<Character> list = new ArrayList<>();
for (Character ch:key.toCharArray()){
if (!list.contains(ch))
list.add(ch);
}
//将其他字母补充进容器,并建立键值对
char c = 'a';
Map<Character,Character> map = new HashMap<>();
for (int i = 0;i<26;i++){
if (!list.contains(c)){
list.add(c);
}
map.put(c,list.get(i)); //也可以单独建立,如下注释的代码
c++;
}
// //建立键值对
// char c1 = 'a';
// Map<Character,Character> map = new HashMap<>();
// for (int i = 0;i<26;i++){
// map.put(c1++,list.get(i));
// }
for (Character temp:str.toCharArray()){
if (Character.isLetter(temp)){
if (Character.isUpperCase(temp)) //判断是否要输出大写
System.out.print(Character.toUpperCase(map.get(Character.toLowerCase(temp))));
else
System.out.print(map.get(temp));
}else
System.out.print(temp); // 非字母输出原始字符
}
System.out.println();
}
}
}
while True: try: A=input() B=input() C="ABCDEFGHIJKLMNOPQRSTUVWXYZ" A2='' res='' for i in A: if i not in A2: A2+=i A2=A2.upper() for j in C: if j not in A2 and j.lower() not in A2: A2+=j for i in B: if i.islower(): res+=A2[C.index(i.upper())].lower() else: res+=A2[C.index(i.upper())].upper() print(res)
while True:
try:
key = input()
value = input()
l = list(key)
l1 = l[::-1]
for index,i in enumerate(l1):
if l1.count(i) > 1:
l1[index] = ' '
for i in range(l1.count(' ')):
l1.remove(' ')
l = l1[::-1]
a_z=[chr(ord('a')+i) for i in range(26)]
for i in l:
a_z.remove(i)
l=l+a_z
l2=list(value)
for i in l2:
if i==" ":
print(" ",end='')
else:
print(l[ord(i)-97],end='')
print()
except:
break import java.util.LinkedHashSet;
import java.util.Scanner;
import java.util.Set;
/**
* @author Yuliang.Lee
* @version 1.0
* @date 2021/9/15 12:35
* 字符串加密:
有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,其余几个丢弃。现在,修改过的那个单词属于字母表的下面,如下所示:
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
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y
上面其他用字母表中剩余的字母填充完整。在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。
因此,使用这个密匙,Attack AT DAWN(黎明时攻击)就会被加密为Tpptad TP ITVH。
* 示例:
输入:
nihao
ni
输出:
le
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String key = in.nextLine().toUpperCase();
String str = in.nextLine();
Set<Character> set = new LinkedHashSet<>();
for (int i = 0; i < key.length(); i++) {
set.add(key.charAt(i));
}
for (int ch = 65; ch < 91; ch++) {
set.add((char) ch);
}
// 获得字符加密映射表
char[] mapper = new char[26];
int index = 0;
for (Character e : set) {
mapper[index] = e;
index++;
}
// 加密输出
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch != ' ') {
if (ch - 65 > 26) {
// 小写
ch = (char) (mapper[ch - 97] + 32);
} else {
// 大写
ch = mapper[ch - 65];
}
}
System.out.print(ch);
}
System.out.println();
}
}
}
#include<bits/stdc++.h>
using namespace std;
int main(){
string key, s;
while(cin>>key>>s){
string tmp;
for(int i=0;i<key.size();i++){
if(tmp.find(toupper(key[i]))==-1){
tmp.push_back(toupper(key[i]));
}
}
for(int i=0;i<26;i++){
if(tmp.find(i+'A')==-1){
tmp.push_back(i+'A');
}
}
for(int i=0;i<s.size();i++){
if(s[i]>='a' && s[i]<='z'){
s[i]=tolower(tmp[s[i]-'a']);
}
else if(s[i]>='A' && s[i]<='Z'){
s[i]=tmp[s[i]-'A'];
}
}
cout<<s<<endl;
}
return 0;
} #include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main() {
string s, key;
while(cin >> key>>s ){
//密钥映射表的制作
transform(key.begin(), key.end(), key.begin(), ::toupper);
int v[26]{0};
string solve{};
for (char c : key) {
v[c - 'A']++;
if (v[c - 'A'] == 1) {
solve += c;
}
}
for (int i = 0; i < 26; i++) {
if (!v[i])
solve += i + 'A';
}
solve += solve;
transform(solve.begin() + 26, solve.end(), solve.begin() + 26, ::tolower);
string source = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
//加密
for (int i = 0; i < s.size(); i++) {
s[i]=solve[source.find(s[i])];
}
cout << s << endl;
}
} #include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
int main()
{
string str, key, secret, result;
while (cin >> str && cin >> secret)
{
//对key的处理
key="";
int alpha[26] = { 0 };
for (int i = 0; i < str.size(); i++)
{
if (alpha[str[i] - 'a'] == 0)
{
alpha[str[i] - 'a'] = 1;
key.push_back(str[i]);
}
}
for (int j = 0; j < 26; j++)
{
if (alpha[j] == 0)
{
key.push_back(j + 'a');
}
}
//对密文的处理
result ="";
for (int k = 0; k < secret.size(); k++)
{
result.push_back(key[secret[k] - 'a']);
}
cout << result<<endl;
}
} #include<stdio.h>
#include<string.h>
int main(void)
{
int key[26];
char word[100];
char txt[100];
while(scanf("%s %s",&word,&txt)!=EOF)
{
int n=strlen(word);
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(word[i]==word[j])
{
word[j]='0';
}
}
}
int t=0;
for(int i=0;i<n;i++)
{
if(word[i]>='a'&&word[i]<='z')
{
key[t]=word[i]-'a';
t++;
}
else if(word[i]>='A'&&word[i]<='Z')
{
key[t]=word[i]-'A';
t++;
}
}
int k;
int q=0;
for(int i=0;i<26;i++)
{
k=1;
for(int j=0;j<t;j++)
{
if(i==key[j])
{
k=0;
}
}
if(k==1)
{
key[t+q]=i;
q++;
}
}
int len=strlen(txt);
for(int i=0;i<len;i++)
{
if(txt[i]==' ')
{
printf(" ");
}
else if(txt[i]>='a'&&txt[i]<='z')
{
printf("%c",'a'+key[txt[i]-'a']);
}
else if(txt[i]>='A'&&txt[i]<='Z')
{
printf("%c",'A'+key[txt[i]-'A']);
}
}
printf("\n");
}
} alphabet = "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".split()
while True:
try:
key, plaintext = input().strip(), input().strip()
mem = set() # 用于去重key的字符
# 构建值列表
k, v = list(alphabet), []
for c in key.upper():
if c not in mem:
mem.add(c)
v.append(c)
k.remove(c)
v.extend(k)
# 构建映射关系
mp = dict(zip(alphabet, v))
# 加密
ciphertext = []
for c in plaintext:
if ord(c) >= 97 and ord(c) <= 122:
# 由于mp中的key为大写字母,所有明文中字符为小写字母时转换为大写字母来进行翻译
ciphertext.append(mp[c.upper()].lower())
else:
ciphertext.append(mp[c])
print(''.join(ciphertext))
except:
break import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String key = sc.next();
String source = sc.next();
StringBuilder sb = new StringBuilder();
String abc = "";
Map<Character,Character> letterMap = new HashMap();
if(97<=Integer.valueOf(key.charAt(0)) && Integer.valueOf(key.charAt(0))<=122){
abc = "abcdefghijklmnopqrstuvwxyz";
}else{
abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
}
//先把key去重
for (int i = 0; i < key.length(); i++) {
char c = key.charAt(i);
if(!sb.toString().contains(String.valueOf(c))){
sb.append(c);
}
}
//key和26个字母中的其他字母组成下行字符串
for(int i = 0;i<abc.length();i++){
char c = abc.charAt(i);
if(!sb.toString().contains(String.valueOf(c))){
sb.append(c);
}
}
//将上行字符串和下行字符串一一对应放入map中
for(int i = 0;i<abc.length();i++){
char c1 = abc.charAt(i);
char c2 = sb.charAt(i);
letterMap.put(c1, c2);
}
//根据source来取值
for(int i = 0;i<source.length();i++){
char c = source.charAt(i);
System.out.print(letterMap.get(c));
}
System.out.println("");
}
}
} //去重->维护一套密码机制
import java.util.*;
public class Main {
public static void main(String[] args) {
String oldKey = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
LinkedHashSet<Character> set = new LinkedHashSet<>();
HashMap<Character,Character> map = new HashMap();
String key = in.nextLine();
String value = in.nextLine();
for(int i =0; i<key.length(); i++){
if(key.charAt(i)>'Z'){
set.add((char)(key.charAt(i)-32));
}else{
set.add(key.charAt(i));
}
}
for(int i =0; i<oldKey.length(); i++){
set.add(oldKey.charAt(i));
}
int index = 0;
for(char s : set){
map.put(oldKey.charAt(index),s);
// map.put(oldKey.charAt(index)+"",((char)(s+32))+"");
index++;
}
//AscII大小写差值为26+6=32
for(int i = 0; i<value.length(); i++){
if(value.charAt(i)>'Z'){
char k = map.get((char)(value.charAt(i)-32));
System.out.print((char)(k+32));
} else {
System.out.print((char)map.get(value.charAt(i)));
}
// 三元编译不过 ??System.out.print(value.charAt(i)>'Z'?(char)(map.get((char)(value.charAt(i)-32))+32):map.get(value.charAt(i)));
}
System.out.println("");
}
}
} #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXSIZE 100
#define ALNUMS 26
typedef struct{
char num;
char exist;
}Dic;
int main(){
char key[ALNUMS] = {'\0'};
while(gets(key)){
char str[MAXSIZE] = {'\0'};
gets(str);
int i, j, len_key = strlen(key);
Dic *dic = (Dic*)calloc(ALNUMS, sizeof(Dic));
int len_str = strlen(str);
for(i=0, j= 0; i<len_key; i++){
int temp = toupper(key[i]) - 'A';
if(dic[temp].exist == 0){
dic[temp].exist = 1;
dic[j].num = temp + 'A';
j++;
}
}
for(i=0; i<ALNUMS; i++){
if(dic[i].exist == 0){
dic[j++].num = i + 'A';
dic[i].exist = 1;
}
}
for(i=0; i<len_str; i++){
if(isupper(str[i])){
printf("%c", dic[str[i]-'A'].num);
}
else if(islower(str[i]))
printf("%c", tolower(dic[str[i]-'a'].num));
else
printf("%c", str[i]);
}
printf("\n");
free(dic);
}
return 0;
}