• 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('
    ');
        }
    
        return 0;
    }


  • 相关阅读:
    JDBC
    Servlet的优缺点
    css样式,媒体查询,垂直居中,js对象
    浏览器渲染优化
    css秘密花园
    express 4
    redux
    koa
    webpack
    react学习总结
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564600.html
Copyright © 2020-2023  润新知