电话号码对应英语单词

来源:《编程之美-----微软技术面试心得》

要求:根据一串数字输出对应在手机键盘上的相应所有字符。

 
  
#include < stdio.h >
#include
< stdlib.h >

// KeyBoard二维数组记录每个数字键对应的字符集
char KeyBoard[ 10 ][ 10 ] = {
"" , // 0
"" , // 1
" ABC " , // 2
" DEF " , // 3
" GHI " , // 4
" JKL " , // 5
" MNO " , // 6
" PQRS " , // 7
" TUV " , // 8
" WXYZ " , // 9此处逗号可以不要
};

// Total数组记录每个数据见能表达的字母的个数
int Total[ 10 ] = {
0 , // 0
0 , // 1
3 , // 2
3 , // 3
3 , // 4
3 , // 5
3 , // 6
4 , // 7
3 , // 8
4 // 9
};

// OffSize数组记录每个字母在它所在的数字键能代表的字符集中的偏移(索引),初始化为0
int OffSize[ 10 ] = { 0 };

int main()
{
// Number数组存放一串待处理的数字
int Number[] = { 2 , 3 , 4 };
// n为Number数组中数字的个数
int n = sizeof (Number) / sizeof (Number[ 0 ]);

while ( 1 )
{
for ( int i = 0 ;i < n;i ++ )
printf(
" %c " ,KeyBoard[Number[i]][OffSize[Number[i]]]);
printf(
" \n " );

int k = n - 1 ; // 此句的位置很重要
while (k >= 0 )
{
if (OffSize[Number[k]] < Total[Number[k]] - 1 )
{
OffSize[Number[k]]
++ ;
break ;
}
else
{
OffSize[Number[k]]
= 0 ;
k
-- ;
}
}

if (k < 0 )
break ;

}

return (EXIT_SUCCESS);
}

转载于:https://www.cnblogs.com/strider/articles/Algrithm_1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值