HDOJ-1287 破译密码(数学)

时间:2021-01-19 20:01:58

异或性质:

C=A XOR B--> C XOR B=A

枚举异或的字母,如果是合法的,那么所有解密出来的字母都在[A,Z]之间。

自己被优先级坑了一回

if((text[i]^key) <'A' || (text[i]^key)>'Z')

(text[i]^key)一开始没加括号......

基础啊,既然没有背过优先级,为了保险,不把握的地方就加上括号吧。

#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int MAXN=1000;
int text[MAXN+5];

void work(int n)
{
int i,key,flag;
for(i = 0; i < n; i++)
scanf("%d",&text[i]);
for(key = 'A'; key <= 'Z'; key++)
{
flag = 1;
for(i = 0; i < n; i++)
if((text[i]^key) <'A' || (text[i]^key)>'Z')
{
flag = 0;
}
if(flag) break;
}
for(i = 0; i < n; i++)
printf("%c",text[i]^key);
printf("\n");
}

int main()
{
int n;
while(~scanf("%d",&n))
work(n);
return 0;
}