• SZU:L89 Frog Encoding


    Judge Info

    • Memory Limit: 65536KB
    • Case Time Limit: 3000MS
    • Time Limit: 3000MS
    • Judger: Normal

    Description

    青蛙们发现在传输信件时经常会被别人偷看,愤怒的青蛙向码农们求救。于是,码农们为它们提供了一套加密和解密的方法,从而将它们的信件内容加密成一段莫尔斯电码。现在给出译码程序:
    0.加密序列为:

    ----**----***--**---**---*------******--***--**---**---*----**---***---*****----***--**-----******--
    

    1.每五个字符为一段的莫尔斯电码各对应着一个数字,将其转换为数字为:

    91322173322123613273
    

    2.将该串数字分拆为两个一小段的形式:

    91 32 21 73 32 21 23 61 32 73
    

    3.按以上每小段中的两个数字在手机上输出字母,当该两个数字为xy时,按y次数字键x即可得到对应字母(如91='w'),以下为对应字母串:

    WEAREACMER
    

    至此,"WEAREACMER(We are ACMer)"即为解密序列,加密序列已解密成功。 现在,你能将程序中所输入的一串加密序列解密吗?

    Input

    第一行输入Case个数t(t<500),对于余下t行,每行输入一串莫尔斯电码序列(保证序列有效,序列长度为l,l为10的整数倍且l<5000)

    Output

    对于每个Case,输出一行,以表示其对应结果(所有字母用大写表示)

    Sample Input

    1
    ----**----***--**---**---*------******--***--**---**---*----**---***---*****----***--**-----******--
    

    Sample Output

    WEAREACMER
    

    Init

    莫尔斯电码表:
    0 ----- 1 *----
    2 **--- 3 ***--
    4 ****- 5 *****
    6 -**** 7 --***
    8 ---** 9 ----*
    
    手机键盘字母对应表:
    2 ABC   3 DEF
    4 GHI   5 JKL
    6 MNO   7 PQRS
    8 TUV   9 WXYZ

    解题思路:用二维数组来做,而且用到了C程序设计语言第一章的 s[++] = a[++] != '' ,感觉这题目很好所以发到博客来。

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 char M[10][6] = {"-----","*----","**---","***--","****-","*****","-****","--***","---**","----*"};
     5 char N[10][5]={"","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"};
     6 char s[5012];
     7 char A[10];
     8 int B[1012];
     9 int main() {
    10     int t,i,k,j, len;
    11     scanf("%d", &t);
    12     while (t--) {
    13         scanf("%s", s);
    14         len = strlen(s);
    15         for (i=0;i<len;i+=5) {
    16             j=i;
    17             k=0;
    18             while (k<5) 
    19                 A[k++] = s[j++];
    20             A[5] = '';
    21             for(j=0;j<10;j++) if(strcmp(A,M[j])==0) break;
    22             B[i/5] = j;
    23     //        printf("%d", j);
    24         }
    25         for(i=0;i<len/10;++i)
    26             putchar(N[B[2*i]][B[2*i+1]-1]);
    27         printf("
    ");
    28     }
    29     
    30 }
     
  • 相关阅读:
    攻防世界WEB新手区第一题
    攻防世界WEB新手区第四题
    12月14
    12月12
    12月13
    centos关机重启命令
    解决docker容器内没有ip addr | ifconfig | ping命令
    Docker + Redis5.0.9集群搭建,3主3从(分片 + 高可用 + 负载均衡)
    docker创建自定义网络,容器内部使用容器名相互ping通,配置不同网段互通
    docker常用命令
  • 原文地址:https://www.cnblogs.com/firstrate/p/3186153.html
Copyright © 2020-2023  润新知