Advertisement

北京航空航天大学某年的保研上机题

阅读量:

**反序加密(非文件)

问题描述

输入说明

输出要求

示例

解释

【评分标准】共有5个测试点。提交程序名为example2.c

复制代码
 #include <stdio.h>

    
 #include <string.h>
    
  
    
 int main ()
    
 {
    
 	char ch, words[50], secret_key[50], str[100];
    
 	char alphabet[27] = {"abcdefghijklmnopqrstuvwxyz"};
    
 	int i, j, k, len;
    
 	i = 0;
    
 /*	ch = getchar();
    
 	while (ch != '\n')
    
 	{
    
 		words[i] = ch;
    
 		ch =getchar();
    
 		i ++;
    
 	}
    
 	words[i] = '\0';
    
   19. 	i = 0;
    
 	ch = getchar();
    
 	while (ch != '\n')
    
 	{
    
 		str[i] = ch;
    
 		ch =getchar();
    
 		i ++;
    
 	}
    
 	str[i] = '\0';
    
 */
    
 	gets(words);
    
 	gets(str);
    
 	len = strlen(words);
    
 	for (i = 0; i < len; i ++)//去掉密钥单词中的重复字母
    
 	{
    
 		for (j = i + 1; j < len; j ++)
    
 		{
    
 			if (words[i] == words[j])
    
 			{
    
 				for (k = j ; k < len; k ++)
    
 				{
    
 					words[k] = words[k + 1];
    
 					len --;
    
 				}
    
 			}
    
 		}
    
 	}
    
 	
    
 	//得到密钥串
    
 	for (i = len - 1, j = 0; i >= 0; i --, j ++)
    
 	{
    
 		secret_key[j] = words[i];
    
 	}
    
 	i = len;
    
 	j = 25;
    
 	while (i < 26 && j >= 0)
    
 	{
    
 		for (k = 0; k < len; k ++)//看字母在密钥串中已存在
    
 		{
    
 			if (secret_key[k] == alphabet[j])//若存在,则不保存,跳过该字母
    
 			{
    
 				j --;
    
 				break;
    
 			}
    
 		}
    
 		if (k == len)//若不存在,则保存该字母
    
 		{
    
 			secret_key[i] = alphabet[j];
    
 			i ++;
    
 			j --;
    
 		}
    
 	}
    
 	
    
 	//加密部分
    
 	for (i = 0; str[i] != '\0'; i ++)
    
 	{
    
 		if (str[i] >= 'a' && str[i] <= 'z')
    
 		{
    
 			len = str[i] - 'a';
    
 			putchar(secret_key[len]);
    
 		}
    
 		else
    
 			putchar(str[i]);
    
 	}
    
 	putchar('\n');
    
 	return 0;
    
 }

全部评论 (0)

还没有任何评论哟~