2024 GESP6级 编程第一题 游戏

一、题目

【问题描述】

早期的电报机只能表达两种状态:电路导通和电路断开。电路导通时喇叭可以发声;断开时则不发声。如何用这样的机器来传递人类能理解的信号呢?聪明的你一定想到了——时间的长短可以表达不同的含义(例如时间长代表 1、时间短代表 0),然后再把 01 的二进制序列对应到字符就可以啦。

摩尔斯电码(Morse code)就是这样一种早期的数字通信协议,它通过喇叭发声长短来表示不同的英文字母:

1、点(半角点号 .),喇叭响 1 单位时间,读作“滴”(dit);

2、划(半角减号 -),喇叭响 3 单位时间,读作“嗒”(dah);

3、字符/单词间的停顿,字符停顿 3 单位时间,单词停顿 7 单位时间。

下图,列出了摩尔斯电码和常见字符之间的对应:

".-",  # A

"-...",  # B

"-.-.",  # C

"-..",  # D

".",  # E

"..-.",  # F

"--.",  # G

"....",  # H

"..",  # I

".---",  # J

"-.-",  # K

".-..",  # L

"--",  # M

"-.",  # N

"---",  # O

".--.",  # P

"--.-",  # Q

".-.",  # R

"...",  # S

"-",  # T

"..-",  # U

"...-",  # V

".--",  # W

"-..-",  # X

"-.--",  # Y

"--..",  # Z

".----",  # 1

"..---",  # 2

"...--",  # 3

"....-",  # 4

".....",  # 5

"-....",  # 6

"--...",  # 7

"---..",  # 8

"----.",  # 9

"-----",  # 0

"..--..",  # ?

"-..-.",  # /

"-.--.-",  # ()

"-....-"  # -
 

二、思路一

群众:我懂得的不多怎么办

作者:没事判断会吧,这个思路主打一个

“打表”

#include<bits/stdc++.h>
using namespace std;
int main()
{
    freopen("morse.in","r",stdin);//等级考试中必写(测试代码时标记一下)
    freopen("morse.out","w",stdout);//等级考试中必写(测试代码时标记一下)
    int n,i,flag;
    cin>>n;
    while(n--)
    {
        char a[100000]={0};
        scanf("%s", a);
        if(a[0]=='.'&&a[1]=='-'&&a[2]!='.'&&a[2]!='-'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"A";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]=='.'&&a[3]=='.'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"B";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]=='-'&&a[3]=='.'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"C";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]=='.'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"D";
        }
        if(a[0]=='.'&&a[1]!='.'&&a[1]!='-'&&a[2]!='.'&&a[2]!='-'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"E";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]=='-'&&a[3]=='.'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"F";
        }
        if(a[0]=='-'&&a[1]=='-'&&a[2]=='.'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"G";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]=='.'&&a[3]=='.'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"H";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]!='.'&&a[2]!='-'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"I";
        }
        if(a[0]=='.'&&a[1]=='-'&&a[2]=='-'&&a[3]=='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"J";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]=='-'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"K";
        }
        if(a[0]=='.'&&a[1]=='-'&&a[2]=='.'&&a[3]=='.'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"L";
        }
        if(a[0]=='-'&&a[1]=='-'&&a[2]!='.'&&a[2]!='-'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"M";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]!='.'&&a[2]!='-'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"N";
        }
        if(a[0]=='-'&&a[1]=='-'&&a[2]=='-'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"O";
        }
        if(a[0]=='.'&&a[1]=='-'&&a[2]=='-'&&a[3]=='.'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"P";
        }
        if(a[0]=='-'&&a[1]=='-'&&a[2]=='.'&&a[3]=='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"Q";
        }
        if(a[0]=='.'&&a[1]=='-'&&a[2]=='.'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"R";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]=='.'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"S";
        }
        if(a[0]=='-'&&a[1]!='.'&&a[1]!='-'&&a[2]!='.'&&a[2]!='-'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"T";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]=='-'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"U";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]=='.'&&a[3]=='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"V";
        }
        if(a[0]=='.'&&a[1]=='-'&&a[2]=='-'&&a[3]!='.'&&a[3]!='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"W";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]=='.'&&a[3]=='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"X";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]=='-'&&a[3]=='-'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"Y";
        }
        if(a[0]=='-'&&a[1]=='-'&&a[2]=='.'&&a[3]=='.'&&a[4]!='.'&&a[4]!='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"Z";
        }
        if(a[0]=='.'&&a[1]=='-'&&a[2]=='-'&&a[3]=='-'&&a[4]=='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"1";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]=='-'&&a[3]=='-'&&a[4]=='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"2";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]=='.'&&a[3]=='-'&&a[4]=='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"3";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]=='.'&&a[3]=='.'&&a[4]=='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"4";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]=='.'&&a[3]=='.'&&a[4]=='.'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"5";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]=='.'&&a[3]=='.'&&a[4]=='.'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"6";
        }
        if(a[0]=='-'&&a[1]=='-'&&a[2]=='.'&&a[3]=='.'&&a[4]=='.'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"7";
        }
        if(a[0]=='-'&&a[1]=='-'&&a[2]=='-'&&a[3]=='.'&&a[4]=='.'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"8";
        }
        if(a[0]=='-'&&a[1]=='-'&&a[2]=='-'&&a[3]=='-'&&a[4]=='.'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"9";
        }
        if(a[0]=='-'&&a[1]=='-'&&a[2]=='-'&&a[3]=='-'&&a[4]=='-'&&a[5]!='.'&&a[5]!='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"0";
        }
        if(a[0]=='.'&&a[1]=='.'&&a[2]=='-'&&a[3]=='-'&&a[4]=='.'&&a[5]=='.'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"?";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]=='.'&&a[3]=='-'&&a[4]=='.'&&a[5]=='.'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"/";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]=='-'&&a[3]=='-'&&a[4]=='.'&&a[5]=='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"()";
        }
        if(a[0]=='-'&&a[1]=='.'&&a[2]=='.'&&a[3]=='.'&&a[4]=='.'&&a[5]=='-'&&a[6]!='.'&&a[6]!='-')
        {
            cout<<"-";
        }
    }
    cout<<endl;
    system("pause");
	return 0;
}

看完上面有些人肯定想问:“你为什么在长度短的摩斯密码后面还要判断这么多呢”

举个例子

输入

.-

输出

EA

为什么呢因为你只判断了点没判断后面啊!

三、思路二

我们可以设如果输入的是“.- -.-”

则我们要输出AC

首先我们先设“.-”为第一行 代表“A”        阿斯卡码值为65

第二行“-...”为第二行 代表“B”        阿斯卡码值为66

第三行“-.-.”为第三行 代表“C”        阿斯卡码值为67

此处省略n字

然后呢咱们可以模了,判断输入的为第一行的摩斯密码则输出A

有判断输入的为第三行的摩斯密码则输出‘A’+2

“这不就对了吗”

“然后”

“上代码”

#include<iostream>
#include<cstring>
using namespace std;
char a[10];
char morse[30][10]={".-",
                    "-...",
                    "-.-.",
                    "-..",
                    ".",
                    "..-.",
                    "--.",
                    "....",
                    "..",
                    ".---",
                    "-.-",
                    ".-..",
                    "--",
                    "-.",
                    "---",
                    ".--.",
                    "--.-",
                    ".-.",
                    "...",
                    "-",
                    "..-",
                    "...-",
                    ".--",
                    "-..-",
                    "-.--",
                    "--..",
};
int Find()
{
    int i,j;
    for(i=0;i<26;i++)
    {
        for(j=0;j<=4;j++)
        {
            if(morse[i][j]!=a[j])
            {
                break;
            }
        }
        if(j==5)
        {
            return i;
        }
    }
}
int main()
{
    freopen("morse.in","r",stdin);
    freopen("morse.out","w",stdout);
    int n,i,j,k;
    char ans;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        memset(a,0,sizeof(a));//初始化
        cin>>a;
        cout<<(char )('A'+Find());//行数加字母转换(强制转换)
    }
    cout<<endl;
    system("pause");
    return 0;
}

看到这里如果还有哪里没看懂的话,那就发评论问吧。

给个赞吧"awa"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值