HDU1287 破译密码

问题链接:HDU1287 破译密码。基础训练级的题,用C语言编写程序。

C语言中,异或运算符是“^”。对于源码a,加密字母x,密文字母v,根据题意满足:a^x=v,那么有a^x^x=v^x,得a=v^x。对于所有的v,用“A”到“Z”作为x去试算,满足v^x为“A”到“Z”即为加密字母x。

试探法寻找密码用大写字母是需要找到一个字母x,满足对于所有数据计算结果都为大写字母。

AC的C语言程序如下:

/* HDU1287 破译密码 */

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    int n, v[1024], x, i, j;

    while(scanf("%d", &n) != EOF) {
        // 读入数据
        for(i=0; i<n; i++)
            scanf("%d", &v[i]);

        // 试探法寻找加密用大写字母
        for(i='A'; i<='Z'; i++) {
            for(j=0; j<n; j++) {
                if(!isupper(v[j] ^ i))
                    break;
            }
            if(j == n) {
                x = i;
                break;
            }
        }

        // 使用加密用大写字母x解密
        for(i=0; i<n; i++) {
            putchar(v[i]^x);
        }
        putchar('\n');
    }

    return 0;
}
时间: 2024-10-05 04:43:54

HDU1287 破译密码的相关文章

《程序设计技术》课程辅助学习资料

本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定一个坚实的基础. 自己编写程序也是学习编程必不可少的一个环节.自己编写是否正确可以通过OJ系统来验证.选做OJ的程序设计题方便于评价自己所写的程序是否正确.想要提高编写程序的能力并且达到更高的水平,从各个OJ中选做一些编程题是十分必要的. 文中提供了CCF-CSP认证考试历年 试题的第1题的题解.这些题解中都

Linux发行版Debian操作系统破译密码

Linux发行版Debian操作系统破译密码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实玩过Linux的小伙伴,对破解服务器密码都应该有所了解,典型的两个代表,我觉得一个是Centos6.x版本网上和Ubantu15.04版本网上都是很适合大家去玩的,只要把这2个操作系统玩熟了,其他的操作系统都是手到擒来的事情.服务器端我推荐使用Centos发型版本,至于个人用户的话我推荐Ubantu,因为用户会更注重体验,而服务器更注重稳定嘛,哈哈~ 我写这篇博客,就是因为我们的一

杭电ACM1287——破译密码

这题,简单的异或运算. a ^ b = c  => a ^ b ^ a = c ^ a = b. 而这个b就是我们要求解的. 下面的是AC的代码: #include <iostream> #include <cstring> using namespace std; int a[10010]; char b[10010]; int main() { int n; int i, j, k; while(cin >> n) { for(i = 0; i < n;

十个破译密码方法

个人网络密码安全是整个网络安全的一个重要环节,如果个人密码遭到黑客破解,将引起非常严重的后果,例如网络银行的存款被转账盗用,网络游戏内的装备或者财产被盗,QQ币被盗用等等,增强网民的网络安全意识是网络普及进程的一个重要环节,因此,在网民采取安全措施保护自己的网络密码之前,有必要了解一下流行的网络密码的破解方法,方能对症下药,以下是我总结的十个主要的网络密码破解方法. 1.暴力穷举 密码破解技术中最基本的就是暴力破解,也叫密码穷举.如果黑客事先知道了账户号码,如邮件帐号.QQ用户帐号.网上银行账号

MCMC 破译密码 http://mlwhiz.com/blog/2015/08/21/MCMC_Algorithms_Cryptography/

# AIM: To Decrypt a text using MCMC approach. i.e. find decryption key which we will call cipher from now on. import string import math import random # This function takes as input a decryption key and creates a dict for key where each letter in the

学术休假-破译密码

蛋收到了两串加密的密码:破解的规则是:现将两串密码的数字提取出来,再将上下的数字进行相加,不够的将用0代替,最后的数字再加上70得到字母的ASCII码值,最后求出密码. 例如: 样例输入: @#GHt1GG6gB70h)*4^2!*6 %G5=j6%[email protected] 1 6 7 0 4 2 6 5 6 3 6 0 ============= 6 12 10 6 4 2 6 样例输出: LRPLJHL /* *Copyright (c) 2015,烟台大学计算机学院 *All g

POJ3749 破译密码

Description 据说最早的密码来自于罗马的凯撒大帝.消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F).而你要获得消息原文,也就是要将这个过程反过来. 密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z M 原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U 注意:只有字母会发生替换,其他非字

HDU ACM 1287 破译密码

直接枚举即可 #include<iostream> using namespace std; int main() { int n,i,j; int a[10001]; char s; while(cin>>n) { for(i=0;i<n;i++) cin>>a[i]; for(i=0;i<26;i++) { s=i+'A'; for(j=0;j<n;j++) if((a[j]^s) <'A' || (a[j]^s) >'Z') brea

破译密码

Description大意就是:给n条01信息以及m条01密码,求对于每条密码,有多少条信息与他的最长公共前缀=min(密码长度,该条信息长度),1<=N,M<=50000,其长度均小于等于10000输入的总长度<=500000Input第1行输入N和M之后N行描述秘密信息,之后M行描述密码.每行先输入一个整数表示信息或密码的长度,之后输入这个信息或密码.所有数字之间都用空格隔开.Output共M行,输出每条密码的匹配信息数.Sample Input4 5  //4条信息,5组密码3 0