^按位异或的意思。就是“不同为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 }