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


  • 相关阅读:
    LeetCode 230. Kth Smallest Element in a BST
    LeetCode 114. Flatten Binary Tree to Linked List
    LeetCode 222. Count Complete Tree Nodes
    LeetCode 129. Sum Root to Leaf Numbers
    LeetCode 113. Path Sum II
    LeetCode 257. Binary Tree Paths
    Java Convert String & Int
    Java Annotations
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564652.html
Copyright © 2011-2022 走看看