在曹哥的帮助下终于AC了,基本功不扎实啊。非常感谢~~~
Problem 1209 - 破译电话号码
Time Limit: 1000MS Memory Limit: 65536KB Difficulty:
Total Submit: 132 Accepted: 33 Special Judge: No
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
Hint
Source
zjy
Time Limit: 1000MS Memory Limit: 65536KB Difficulty:
Total Submit: 132 Accepted: 33 Special Judge: No
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
Hint
Source
zjy
程序代码:
#include <iostream> #define N 100000 using namespace std; typedef struct { int x,y; }Code; char f(int x,int y) { if(x+y == 2277) return '0'; else if(x+y == 1906) return '1'; else if(x+y == 2033) return '2'; else if(x+y == 2174) return '3'; else if(x+y == 1979) return '4'; else if(x+y == 2106) return '5'; else if(x+y == 2247) return '6'; else if(x+y == 2061) return '7'; else if(x+y == 2188) return '8'; else if(x+y == 2329) return '9'; else if(x+y == 2330) return 'A'; else if(x+y == 2403) return 'B'; else if(x+y == 2485) return 'C'; else if(x+y == 2574) return 'D'; else if(x+y == 2150) return '*'; else return '#'; } int main() { int n,i; Code code[N]; while(cin>>n && n) { for(i=0;i<n;++i) cin>>code[i].x; for(i=0;i<n;++i) cin>>code[i].y; for(i=0;i<n;++i) { if (i!=0 && i%23==0) cout<<endl; cout<<f(code[i].x,code[i].y); } cout<<endl; } return 0; }
[ 本帖最后由 C_戴忠意 于 2012-12-23 18:42 编辑 ]
编程之路定要走完……