USACO解析name that number篇
来源:互联网 发布:淘宝首页全屏尺寸 编辑:程序博客网 时间:2024/06/05 00:26
题目大意:
常规的手机键盘上,拨号键上面的每一个数字都代表了3个字母,所以输入一组数字之后会产生很多个字母组合,现在给你一个字典,字典里面的名字都按照字母顺序排好了,要求你输入1~12个数字,然后输出与字典里面相同的字母组合,如果没有在字典里查找到相同的字母组合,就输出“NONE”
解题思路:
常规的解法是,先生成这些数字能够生成的字母组合,然后再逐一到字典里面比对,这样做不会超时。另一种算法效率比较高的方法就是,只比对每个字母所代表的数字,这样只需要直接搜索字典里面符合数字的字母组合就行
常规的手机键盘上,拨号键上面的每一个数字都代表了3个字母,所以输入一组数字之后会产生很多个字母组合,现在给你一个字典,字典里面的名字都按照字母顺序排好了,要求你输入1~12个数字,然后输出与字典里面相同的字母组合,如果没有在字典里查找到相同的字母组合,就输出“NONE”
解题思路:
常规的解法是,先生成这些数字能够生成的字母组合,然后再逐一到字典里面比对,这样做不会超时。另一种算法效率比较高的方法就是,只比对每个字母所代表的数字,这样只需要直接搜索字典里面符合数字的字母组合就行
/*ID: huangxi16LANG: C++TASK: namenum*/#include <stdio.h>#include <string.h>//key 每个字母对应的按键号 int key[28]= {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,0};//num 存放输入的数字char num[20];int main(){ //s 存放从字典里读入的字符串char s[200]; freopen("namenum.in","r",stdin); freopen("namenum.out","w",stdout); scanf("%s",num);//n 计算输入输入数字的长度 int n=strlen(num);//标记字典里是否有对应的名字 int count=0; freopen("dict.txt","r",stdin); while(scanf("%s",s)!=EOF) { int m=0; m=strlen(s);//这里做了一个优化,只有从字典读入的字符串长度和输入数字的长度一样时,才进行处理 if(n==m) {//利用ascii码加减进行按位比对,注意m必须不小于0 while(num[n-m]-48==key[s[n-m]-'A']&&m>=0) { m--; if(0==m) { printf("%s\n",s); count++; } } } } if(0==count) printf("NONE\n"); return 0;}
- USACO解析name that number篇
- USACO:Name That Number
- Name That Number(USACO)
- [USACO] Name That Number
- USACO Name That Number
- usaco Name That Number
- usaco Name That Number
- [USACO]Name That Number
- USACO:Name That Number
- Name That Number USACO
- USACO Name That Number
- USACO Name That Number
- USACO--Name That Number
- USACO 1.2-Name That Number
- USACO 1.2 Name That Number
- usaco 29 name that number
- USACO 1.2 Name That Number
- USACO--1.2Name That Number
- GetStartupInfoTest
- I2C驱动
- dBm与mW
- 简易记事本
- java回调的应用
- USACO解析name that number篇
- Android控件之SlidingDrawer(滑动式抽屉)
- Struts2标签库详解
- 对zend framework xxe injection 的分析
- JAVA设计模式:享元(Flyweight)
- Galaxy Nexus设置&&开机动画制作
- PL/SQL Developer在64位windows上的使用
- 利用js实现的日期组件toolbar
- 【ExtJs3】系列之一:环境搭建