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

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 12:04
毕业生招你惹你了,问一个发薪日来一句别看网上乱七八糟的你看哪个工作没有固定发薪日扭头就取消了面试就问了一句公司都是这个态度吗还搞上人身攻击了...
程序员小白条:呃呃呃,都还没面试,我都不会问这么细,何况通不通过,去不去都另说,你没实力和学历的话,在外面就这样,说实话没直接已读不回就不错了,浪费时间基本上
点赞 评论 收藏
分享
05-23 19:02
吉林大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务