电话表问题 c++

来源:百度知道 编辑:UC知道 时间:2024/05/24 18:40:05
在电话语音识别中需要识别电话号码,这需要识别0到9十个数字,而识别前首先需要训练这十个数字,请编写程序设计一个电话号码表,要求数字组数最少。其中:每一组数字都是八位(例如:62781704),0到9十个数字中每两个数字之间至少连接一次(象62781707,其中出现了:6-2、2-7、7-8、8-1、1-7、7-0、0-7七个连接,7-0和0-7是不同的连接,10个数字间连接至少为100个),0-0、1-1、......、9-9的连接也要考虑。每个数字在开头、结尾至少各出现一次(象62781707,其中6在开头出现一次,7在结尾出现一次)。
#include<iostream>
using namespace std;

void main()
{ int a[10][10];
int num[15][8]={0};
int i,j,k,l,m,flag;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=1;
for (i=0;i<10;i++)
{
num[i][0]=i;
num[i][7]=i;
}
for (i=0;i<10;i++)
{
for(j=1;j<=5;j++)
{
k=0;
while(1)
{
l=num[i][j-1];
if (a[l][k]==1)
{
num[i][j]=k;
a[l][k]=0;
break;
}
k=k+1;
}
}
l=num[i][5];
m=num[i][7];
for(j=0;j<10;j++)
if((a

我大致看了一下,程序还是比较简单的
但是,题目我没看懂-_-(本人语文那个差啊~~)
LZ如果能把题目表述得再直白一些,我可以帮你解释一下这个程序

#include<iostream>
using namespace std;

int main()
{

int a[10][10];
int num[15][8]={0};
int i,j,k,l,m,flag;

for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=1; //将一百个元素都初始化为1

for (i=0;i<10;i++) //流氓方案,把开头十组数的左右都假设为i(以此来满足各数在开头结尾都出现一次

)-_-
{
num[i][0]=i;
num[i][7]=i;
}

for (i=0;i<10;i++)
{
//////////第一部分////////上///////////
for(j=1;j<=5;j++) //因为前面使用了流氓方案,所有这就不用讨论j=0,j=7了 --此处j=6比较难解决,编

程者偷懒先放一边先-_-
{
k=0; //重载k值,每一次无限循环时k值都会改变,要归0,以便遍历数组a[num[i][j-1]][10]
while(1) //无限循环
{
l=num[i][j-1]; //l等于要确定的数的前一个数for example 65XXXXXX l=5
if (a[l][k]==1) //此处非常非常的巧妙啊,佩服之至。编程者将一百个连接想象成一百个点/*前一个10

是连接起点,后一个10是连接终点*/,如果此点尚未被使用就记为1,用过之后记为0;
{ num[i][j]=k;
a[l][k]=0; <