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\n", 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\n", s);
            }
        }
    }

    return 0;
}


你可能感兴趣的:(密码,译码,HDU1048)