标题:微创笔试编程题,高手指点下
取消只看楼主
wlhdhn
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2009-11-18
结帖率:50%
 问题点数:0 回复次数:5 
微创笔试编程题,高手指点下
在电话机键盘上,可以发现26个字母的分布在2到9这8个数字键上,某人的电话号码是65967427,观察单词“Olympics”;可以发现:字母o位于数字键5上,。。。字母s对应数字键7,此时我们说olmpics是65967427对应的一个字母组合,65967427还可以对应其他很多种字母组合,例如mjwmpgap也是其中之一,以C语言编写函数,该函数的输入为一个电话号码(允许输入为3位到11位的十进制数),在屏幕上输出该数字对应的所有字母组合,并返回组合的总数,如果数字中包含1或0,由于没有与之对应的字母,则直接返回0.
请高手帮忙解答下,我想着用嵌套循环,可是若输入十一位要十一层嵌套啊,应该有更好的方法,大家相互交流下
搜索更多相关主题的帖子: 微创 笔试 
2010-06-25 14:01
wlhdhn
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2009-11-18
得分:0 
我自己尝试了输入三个数字的情况,已经正确运行。
#include<stdio.h>
#include<string.h>
void main()
{int i,j,k,m=0;int n0,n1,n2;
char pho[10][5]={{'0'},{'0'},"abc","def","ghi","jkl","mno","pqrs",{'t','u','v'},{'w','x','y','z'}};
char num[11],word[11];
printf("put your number please:\n");
gets(num);
n0=num[0]-48;
n1=num[1]-48;n2=num[2]-48;
printf("%d %d %d\n",n0,n1,n2);
puts(pho[n0]);puts(pho[n1]);puts(pho[n2]);
printf("\n%d\n",strlen(pho[n2]));
for(i=0;i<(int)strlen(pho[n0]);i++)
{word[0]=pho[n0][i];
for(j=0;j<(int)strlen(pho[n1]);j++)
{word[1]=pho[n1][j];
for(k=0;k<(int)strlen(pho[n2]);k++)
{word[2]=pho[n2][k];word[3]='\0';
puts(word);putchar('\n');
m++;
}
}
}
printf("\n the total m=%d\n",m);
}
输入三位数的还可以一个一个的赋值,做嵌套循环,如果输入11个数,一一嵌套的话,那就太庞大了
2010-06-25 14:11
wlhdhn
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2009-11-18
得分:0 
是啊,应该考虑运算效率的,若按每个字有3种选择字母,则11个数是3的11次方
2010-06-25 15:20
wlhdhn
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2009-11-18
得分:0 
谢谢楼上这么耐心的回答!!
2010-06-26 19:27
wlhdhn
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2009-11-18
得分:0 
下面是我根据楼上给出的Java写的C程序,已经调试过了,与大家分享下,这个重点就是函数递归调用。
#include<stdio.h>
#include<string.h>
int count=0;
char num[11],res[11];
char pho[10][5]={{'0'},{'0'},"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
void allcomposition(int begin,int end)
{int i,j,k;
if(begin==end)
{k=num[begin]-48;
for(i=0;i<(int)strlen(pho[k]);i++)
{res[begin]=pho[k][i];
puts(res);
count++;
if(count%4==0)
printf("\n");
}
}
for(j=0;j<(int)strlen(pho[num[begin]-48]);j++)
{res[begin]=pho[num[begin]-48][j];
allcomposition(begin+1,end);
}
}
void main()
{int begin,end;
printf("input your number please:\n");
gets(num);
begin=0;end=strlen(num)-1;
allcomposition(begin,end);
printf("\nthere are totally %5d\n",count);
}
2010-06-27 18:28
wlhdhn
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2009-11-18
得分:0 
我想过用switch ,但是那样要层层嵌套,不知楼上有没有更好的解法?
2010-06-29 20:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-311219-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022201 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved