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;
}

 

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务