来源:《编程之美-----微软技术面试心得》
要求:根据一串数字输出对应在手机键盘上的相应所有字符。
#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);
}
#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);
}