XDOJ 1209 - 破译电话号码

Description

在已经过去了的某一天,优酷视频上一位记者报道了360和百度的搜索战,视频中有这位记者用电话拨打360董事长周鸿祎手机的情节,一位蛋疼的大学生把其中电话拨号的录音给截取下来,通过音频分析得到了周鸿祎的电话号码。

                   下面是音频分析的原理(来自微博):

                   我们平常所用的电话,是通过DTMF信号来向交换机传递命令的,我们每按下电话键盘上的一个键,就会同时发出两个不同频率的声音,转化成电流在对面解析(可以回忆柯南剧场版中通过唱歌拨打电话)。也就是说,记者每按下的每个键的声音,实际上是由两个纯粹的音(tone)构成的,通过下面可以看到每个数字由哪两个频率的声音构成。

 

                   假设你是这位破译电话号码的大学生,你已经得出了每个按键音的两个频率,请你告诉大家这些频率代表的字符或者数字。

Input

多组数据,每组数据三行,第一行一个整数N(100000>=N>0)代表已经得到的按键音的个数,第二行N个整数,在这一行中,第i个整数代表第i个按键音的高音。第三行N个整数,在这一行中,第i个整数代表第i个按键音的低音。
输入N=0,代表输入结束。

Output

对于每组数据,输出N个字符或数字,代表破译后的字符或数字,按照输入给出的顺序输出,每行23个字符或数字。

Sample Input

3
1209 1209 1336
697 697 941
3
1336 1336 1336
770 697 941
0

Sample Output

110
520

解题思路:

这个题很简单,不如说是科普题。用switch case语句即可。

#include<iostream>

using namespace std;

const int maxN = 100000;
int freLow[maxN],freHigh[maxN];
void print(int freL,int freH)
{
    switch(freL+freH)
    {
        case (697+1209):cout<<1;break;
        case (697+1336):cout<<2;break;
        case (697+1477):cout<<3;break;
        case (697+1633):cout<<"A";break;
        case (770+1209):cout<<4;break;
        case (770+1336):cout<<5;break;
        case (770+1477):cout<<6;break;
        case (770+1633):cout<<"B";break;
        case (852+1209):cout<<7;break;
        case (852+1336):cout<<8;break;
        case (852+1477):cout<<9;break;
        case (852+1633):cout<<"C";break;
        case (941+1209):cout<<"*";break;
        case (941+1336):cout<<0;break;
        case (941+1477):cout<<"#";break;
        case (941+1633):cout<<"D";break;
    }
}
int main()
{
    int N;

    while(cin>>N)
    {
        if(N==0)
            break;
        for(int i=0;i<N;++i)
            cin>>freLow[i];
        for(int i=0;i<N;++i)
            cin>>freHigh[i];
        for(int i=0;i<N;++i)
        {
            if(i%23==0&&i!=0)
                cout<<endl;
            print(freLow[i],freHigh[i]);
        }
        cout<<endl;
    }
    return 0;
}

 

最后欢迎大家访问我的个人网站: 1024s

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值