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;
}


转载于:https://www.cnblogs.com/tigerisland/p/7564652.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值