铭记于心 | ||
---|---|---|
✨我唯一知道的,便是我一无所知✨ |
众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。
☀️短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼☀️
二分,贪心,并查集,二叉树,图论,深度优先搜索(dfs),宽度优先搜索(bfs),数论,动态规划等等, 路漫漫其修远兮,吾将上下而求索! 希望在此集训中与大家共同进步,有所收获!!!
有一种加密方法为:其使用一个字母串(可以含重复字母,字母个数不超过50)作为密钥。假定密钥单词串为feather,则先去掉密钥单词中的重复字母得到单词串feathr,然后将其反序,并将字母表中的其它字母以反序追加到后面:
r h t a e f z y x w v u s q p o n m l k j i g d c b
加密字母的对应关系如下:
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
r h t a e f z y x w v u s q p o n m l k j i g d c b
其中第一行为原始英文字母,第二行为对应加密字母。其它字符不进行加密。编写一个程序,用这种密码加密输入的字符串。假定输入的待加密字符串中的字母全为小写字母,并且输入密钥也全为小写字母。
从标准输入中输入密钥串,然后在下一行输入要加密的字符串。密钥串字母个数不超过50个,待加密字符串的字符数不超过100个。
加密后结果输出到标准输出。
feather
c language is wonderful.
t urqzjrze xl gpqaemfju.
首先将给定的密钥单词去除重复字母并反序,然后按照上面的加密对应表对后面的内容进行加密即可得到加密后的字符串,其中只对英文字母进行加密对换,并且假设英文字母全是小写字母。
大致思路如下:
#include
int main() {
char str[100], pwd[28];
int flag[266] = { 0 };
scanf("%s", str);
flag[str[0]] = 1;
int index = 1, index2 = 0;
for (int i = 1; i < strlen(str); i++) {
int f = 0;
for (int j = i - 1; j >= 0; j--) {
if (str[j] == str[i])f = 1;
}
if (!f) {
str[index++] = str[i];
flag[str[i]] = 1;
}
}
str[index] = '\0';
for (int i = index - 1; i >= 0; i--) {
pwd[index2++] = str[i];
}
for (int i = 25; i >= 0; i--) {
if (!flag['a' + i])pwd[index2++] = 'a' + i;
}
pwd[index2++] = '\0';
char reqAns[1024];
getchar();
gets(reqAns);
for (int i = 0; i < strlen(reqAns); i++) {
if (isalpha(reqAns[i]))
printf("%c", pwd[reqAns[i] - 'a']);
else
printf("%c", reqAns[i]);
}
return 0;
}
写在最后:
相信大家对今天的集训内容的理解与以往已经有很大不同了吧,或许也感受到了算法的魅力,当然这是一定的,路漫漫其修远兮,吾将上下而求索!伙伴们,明天见!