zoukankan      html  css  js  c++  java
  • HDU1048 The Hardest Problem Ever

    问题链接:HDU1048 The Hardest Problem Ever入门训练题,用C语言编写程序。

    以往,密码通信是一件重要的事情,是一项高技术的工作。不过译码的时候,通常是通过查密码本来实现的。这种方法依旧适用于现在这个计算机时代。

    查表法仍然是一种好办法。有些程序员通过观察,找出编码规律,用程序来译码,程序没有通用性,不值得推荐和借鉴。

    译码过程,使用字符指针来处理,是一种好办法。先计算字符串长度,再用长度值来控制循环处理是一种倒腾。

    简洁版AC程序如下:

    /* HDU1048 The Hardest Problem Ever(简洁版) */
    
    #include <stdio.h>
    #include <string.h>
    
    char start[]= "START";
    char end[]= "END";
    char endofinput[]= "ENDOFINPUT";
    char cipher[] = "VWXYZABCDEFGHIJKLMNOPQRSTU";
    
    int main(void)
    {
        char s[1024], *p;
    
        for(;;) {
            gets(s);
    
            // 判断开始:START
            if(strcmp(s, start) == 0)
                continue;
    
            // 判断报文结束:END
            if(strcmp(s, end) == 0)
                continue;
    
            // 判断结束:ENDOFINPUT
            if(strcmp(s, endofinput) == 0)
                break;
    
            // 译码
            p = s;
            while(*p) {
                if('A' <= *p && *p <='Z') {
                    *p = cipher[*p - 'A'];
                }
                p++;
            }
    
            // 输出结果
            printf("%s
    ", s);
        }
    
        return 0;
    }

    严格语法版AC程序如下:

    /* HDU1048 The Hardest Problem Ever */
    
    #include <stdio.h>
    #include <string.h>
    
    char start[]= "START";
    char end[]= "END";
    char endofinput[]= "ENDOFINPUT";
    char cipher[] = "VWXYZABCDEFGHIJKLMNOPQRSTU";
    
    int main(void)
    {
        char s[1024], *p;
    
        for(;;) {
            gets(s);
    
            // 判断结束:ENDOFINPUT
            if(strcmp(s, endofinput) == 0)
                break;
    
            // 判断开始:START
            if(strcmp(s, start) == 0) {
                // START之后,END之前,需要处理多行
                for(;;) {
                    gets(s);
    
                    // 判断报文结束:END
                    if(strcmp(s, end) == 0)
                        break;
    
                    // 译码
                    p = s;
                    while(*p) {
                        if('A' <= *p && *p <='Z') {
                            *p = cipher[*p - 'A'];
                        }
                        p++;
                    }
    
                    // 输出结果
                    printf("%s
    ", s);
                }
            }
        }
    
        return 0;
    }


  • 相关阅读:
    人机博弈,吃子棋游戏(一)基本介绍
    cesm下载备注
    mysql数据库批量高速插入
    持续学习
    顺序表的功能实现
    Broccoli &amp; Babel使用演示样例
    rk3188调试记录
    Operation not allowed on a unidirectional dataset错误?
    dbExpress操作中用TDBGrid显示数据
    dbexpress连接mysql提示Operation not allowed on a unidirectional dataset
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564652.html
Copyright © 2011-2022 走看看