您的位置:首页 > 编程语言

编程之美:电话号码对应英文单词( 程序实现)

2014-09-13 11:44 821 查看
/************************************************************************/
/*
实现:将输入的手机号码对应手机键盘的字母形成组合,并打印输出
输入: 电话号码位数,对应的电话号码
输出:电话号码对应所用字母组合
*/
/************************************************************************/
#include <cstdio>
#include <assert.h>
#include <cstring>

using namespace std;

char dict[10][5]={
"",//0
"",//1
"ABC",//2
"DEF",//3
"GHI",//4
"JKL",//5
"MNO",//6
"PQRS",//7
"TUV",//8
"WXYZ"//9
};

int total[10]={0,0,3,3,3,3,3,4,3,4};

void printAllStr(int * arr,int len);

int main(int argc,char * argv[])
{

int telNum = 0;
while(scanf("%d",&telNum)!=EOF)
{
int* arr = new int[telNum];
if(!arr)
{
printf("failed to create new arr\n");
break;
}
for(int i=0;i<telNum;++i)
{
scanf("%d",arr+i);
}
// TODO print function
printAllStr(arr,telNum);
delete []arr;
}
return 0;
}

void printAllStr(int * arr, int len)
{
int* res = new int[len];
assert(res);
memset(res,0,sizeof(int)*len);

int resMulty = 1;
for(int i = 0; i< len ; ++i)
{
if(total[arr[i]])
resMulty *= total[arr[i]];
}

printf("\n resMulty=%d\n",resMulty);

int changeI = 0;
int  ordinary = 1;
while(true)
{
printf("[%03d]:",ordinary);
for(int i =0;i<len;++i)
printf("%c",dict[ arr[i] ][  res[i] ]);
puts("");

ordinary ++;
changeI = 0;
while(changeI<len)
{
// 前一组的序号满了,则:先改变下标,再改变对应下标的输出序号
if(res[ changeI  ]<total[ arr[changeI ] ]-1)
{
res[ changeI ]++;
break;
}
else
{
res[ changeI ] = 0;
changeI++;
}
}
if(changeI == len)
break;
}
delete []res;
puts("\nend of one case");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: