一串数字使用电话键盘模拟字母序列
2016-07-08 14:22
274 查看
中午吃饭前,师父突发qq消息,让我写段代码:给出一个十位数,请你使用电话键盘,模拟对应的可能的字母序列。听完我就去写,突然间发现好久没写啦,顿时找不到感觉啦。第一个想法就是用10重for循环遍历打出,但是转过来一想,发给师父的不能这么low,于是改用递归搜索。写了好久,这里拿出六年一下:
#include<stdio.h> #include<math.h> #include<string.h> int arr[11]; __int64 num; int l[10]={0,0,0,3,6,9,12,15,19,22}; int r[10]={0,0,2,5,8,11,14,18,21,25}; int a,b,c,d,e,f,g,h; char data[11]; int map1[26]; char phone[26]={'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'}; void solve(int n) { if(n>10) { for(int k=1;k<=10;k++) { printf("%c",data[k]); } printf("\n"); } for(int j=l[arr ];j<=r[arr ];j++) { if(!map1[j]) { data =phone[j]; map1[j]=1; solve(n+1); map1[j]=0; } } } int main() { while(scanf("%I64d",&num)) { memset(arr,0,sizeof(arr)); memset(data,0,sizeof(data)); for(int i=0;i<=10;i++) { arr[10-i]=num%10; num/=10; } memset(map1,0,sizeof(map1)); for(int i=1;i<=10;i++) { solve(i); } } return 0; }
相关文章推荐
- 包失效,无法编译
- ClientToScreen 和ScreenToClient 及绘图
- 身份证校验
- LinkedList源码剖析
- lib、dll文件默认打开方式改变之后进行恢复
- 关于博客更新问题
- 新特性-对Data Pump的增强
- 新特性-对Data Pump的增强
- 获取springMvc中的bean
- iOS6新特征:UICollectionView高级使用示例之CircleLayout
- C++中引用(&)的用法和应用实例
- MySQL相关
- (转)HashMap的深度解析
- 计算机 学习资料
- ios开发 - 用企业签名打包ipa
- Android keyguard之上如何显示Toast
- AFNetWorking3.0的简单使用
- 为何 IntelliJ IDEA 比 Eclipse 更好
- 微信支付返回-1的情况和解决方式
- ArrayList源码剖析