输入:
第一行包含一个整数N(1≤N≤1000),表示数据的组数。
每组数据包含两行:
第一行是加密过的信息(
不超过1000-个字符)。
第二行是26个大写字母,依次对应字母表:第一个字母对应字母表里的A,第二个对应字母表里的B,以此类推。只会出现大写字母。加密信息中可能会有空格,空格在解密出来的信息中保留。
如:
2
HPC PJVYMIY
BLMRGJIASOPZEFDCKWYHUNXQTV
FDY GAI BG UKMY
KIMHOTSQYRLCUZPAGWJNBVDXEF
HPC PJVYMIY
BLMRGJIASOPZEFDCKWYHUNXQTV
FDY GAI BG UKMY
KIMHOTSQYRLCUZPAGWJNBVDXEF
输出:
对于每一组数据,输出一行解密信息。格式如下:
数据组数(从1开始),解密信息;以空格隔开,最后没有空格,换行符结束。
如:
1 ACM CONTEST
2 THE SKY IS BLUE
2 THE SKY IS BLUE
思路:
明文对应的是标准的ABCDEF...
密文对应的所给定的26个字母
#include<stdio.h>
#include<malloc.h>
const char f[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void jiemi(char *m, const char *n);
int main()
{
int n, i;
char **p;
char **a;
scanf("%d", &n);
getchar();
p = (char **)malloc(sizeof(char *) * n);
a = (char **)malloc(sizeof(char *) * n);
for(i = 0; i < n; i++)
{
a[i] = (char *)malloc(sizeof(char) * 1000);
gets(a[i]);
p[i] = (char *)malloc(sizeof(char) * 26);
gets(p[i]);
jiemi(a[i], p[i]);
}
for(i = 0; i < n; i++)
{
printf("%d %s\n", i+1, a[i]);
}
free(a);
free(p);
return 0;
}
void jiemi(char *m, const char *n)
{
int i, j, temp;
for(i = 0; m[i] != '\0'; i++)
{
j = 0;
while(1)
{
if(m[i] == ' ')
{
break;
}
if(m[i] == f[j])
{
temp = (int)(f[j] - 'A');
m[i] = n[temp];
break;
}
j++;
}
}
}