HDU - 1287 破译密码 (异或)
有个叫“猪头帮”的国家,采用一种简单的文法加密,他们所用的语言里面只有大写字母,没有其他任何字符;现在还知道他们加密的方法是:只用一个大写字母和原文进行异或运算生成密文。请你帮忙解开。
Input
有若干组,每组输入有2行,第一行整数N表示有N个密文,接着一行有N个整数分别表示N个密文。
Output
输出仅有大写字母组成的原文。
Sample Input
30
17 6 9 8 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 18 19 16 17 22 23 20 21 26 27 24
Sample Output
SDKJABCDEFGHIJKLMNOPQRSTUVWXYZ
已知密文,求原文,只会出现大写字母,并且密文是用一个大写字母与原文进行异或运算得到的
遍历A~Z 26个字母,解密后如果全是大写字母则符合要求,否则不符合要求。
a^b=c 则a=b^c
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int c;
for(int i='A';i<='Z';i++)
{
// cout<<i<<'\n';
bool f=1;
for(int j=1;j<=n;j++)
{
if((i^a[j])<'A'||(i^a[j])>'Z')///注意异或运算加上括号
{
f=0;
break;
}
}
if(f)
{
c=i;
break;
}
}
for(int i=1;i<=n;i++)
cout<<(char)(a[i]^c);
cout<<'\n';
}
return 0;
}