p1431 [noip2012]day1-T1Vigenère 密码

版权声明:https://blog.csdn.net/huashuimu2003 https://blog.csdn.net/huashuimu2003/article/details/84920436

题目

描述 Description
16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法——Vigenère 密 码。Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为 南军所广泛使用。
::点击图片在新窗口中打开::
::点击图片在新窗口中打开::
输入格式 Input Format
输入文件名为 vigenere. in。 输入共 2 行。
第一行为一个字符串,表示密钥 k,长度不超过 100,其中仅包含大小写字母。第二行 为一个字符串,表示经加密后的密文,长度不超过 1000,其中仅包含大小写字母。
输出格式 Output Format
输出文件名为 vigenere.out。
输出共 1 行,一个字符串,表示输入密钥和密文所对应的明文。
样例输入 Sample Input

CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm

样例输出 Sample Output

Wherethereisawillthereisaway
时间限制 Time Limitation
1s
注释 Hint
【数据说明】
对于 100%的数据,输入的密钥的长度不超过 100,输入的密文的长度不超过 1000,且 都仅包含英文字母。
来源 Source
noip2012 day t1

代码

/*
*公式:明文=【暗文-(暗文>'Z'?'a':'A')-(密钥-'a')+26】%26+(暗文>'Z'?'a':'A')
*/
#include<bits/stdc++.h>
using namespace std;
char dark[1100],key[110];
int main()
{
	scanf("%s%s",&key,&dark);
	int len=strlen(key);
	int j=0;
	for (int i=0;i<strlen(dark);i++)
	{//toupper()函数功能是把字母字符转换成大写,非字母字符不做出处理
		int ch=tolower(key[j])-'a';
		//tolower()函数功能是把字母字符转换成小写,非字母字符不做出处理 
		char cmd=dark[i]>'Z'?'a':'A';
		int x=(dark[i]-cmd -ch+26)%26;
		printf("%c",cmd+x);
		j=(j+1)%len;//环的思想,分成区块
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/huashuimu2003/article/details/84920436