题解 | #字符串加密#
字符串加密
https://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
#include <stdio.h>
#include<string.h>
char zm[26]={0};
int xtzm(char c,char *jm)
{
int i=0;
while(c!=jm[i])
{
i++;
if(i>=26)
break;
}
return i;
}
int main() {
char a[100]={0}, b[100]={0};
int i,j=0,k;
for(i=0;i<26;i++)
zm[i]='a'+i;
char jm[26]={0};
strcpy(jm, zm);
while (scanf("%s %s", &a, &b) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
for(i=0;a[i]!='\0';i++)
if(a[i]>='A'&&a[i]<='Z')
a[i]+=32;
k=i;
int x;
for(i=0;i<k;i++)
{
jm[i-j]=a[i];
x=xtzm(a[i],jm);
if(x<i-j)
j++;
}
k-=j;
char ch='a';
j=0;
for(;ch<='z';ch++)
{
x=xtzm(ch,jm);
if(x>k||x==26)
{
jm[k+j]=ch;
j++;
}
}
for(i=0;b[i]!='\0';i++)
{
if(b[i]>='a'&&b[i]<='z')
{
x=b[i]-'a';
printf("%c",jm[x]);
}
else {
x=b[i]-'A';
printf("%c",jm[x]-32);
}
}
}
return 0;
}
查看17道真题和解析