^按位异或的意思。就是“不同为1,相同为0”
1^1=0 0^1=1 0^0=0
举个例子:3^5=?
3=(0011)B 5=(0101)B 
   0011
^  0101
————
  0110
0110的十进制数是6
所以3^5=6

这题其实是说存在一个大写字母x,然后让原文(都是大写字母)和x做xor后得到密文。现在给密文求原文。

因为x不知道,所以枚举x。判断方法是判断是否解密出来的原文都在'A'-'Z'范围内。

 

起初做的时候不明白那个异或怎么弄的。只要知道^符号就能做了。

代码:

View Code
 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int n,i,j;
 6     char y; 
 7     int scr[10000];
 8     while(cin>>n) 
 9     {
10         for(i=0;i<n;i++)
11             cin>>scr[i];
12         for(i=65;i<=90;i++)
13             {
14                for(j=0;j<n;j++) 
15                   if((scr[j]^i)<65||(scr[j]^i)>90)
16                      break; 
17                 if(j>=n)
18                  break; 
19             }
20          for(j=0;j<n;j++)
21         {
22             putwchar(scr[j]^i); 
23         } 
24         cout<<endl; 
25     } 
26     
27     
28 } 

 

posted on 2012-09-05 15:36  xinmenghuairi  阅读(343)  评论(0编辑  收藏  举报