| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 520 人关注过本帖
标题:我们的一道作业题
取消只看楼主 加入收藏
小猪熊
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-7-9
收藏
 问题点数:0 回复次数:0 
我们的一道作业题
/*在电话语音识别中需要识别电话号码,这需要识别0到9十个数字,
而识别前首先需要训练这十个数字,请编写程序设计一个电话号码表,
要求数字组数最少。其中:每一组数字都是八位(例如:62781704),
0到9十个数字中每两个数字之间至少连接一次
(象62781707,其中出现了:6-2、2-7、7-8、8-1、1-7、7-0、0-7七个连接,7-0和0-7是不同的连接),
0-0、1-1、......、9-9的连接也要考虑。每个数字在开头、
结尾至少各出现一次(象62781707,其中6在开头出现一次,7在结尾出现一次)。*/

想法:将所有的100种组合列成一个十行十列的数表,在搜一搜就很容易了。

#include<iostream>
using namespace std;
void main()
{
 int i=0,j=0;
    
 int (*p)[10]=new int[10][10];  //建立数表A
 for(j=0;j<10;j=j+2)              //偶数列放置0,1……9
    for(i=0;i<10;i++)
          p[i][j]=i;
      
 
 for(i=0;i<10;i++)           //奇数列循环放置1……9 ,0   
    {
     p[i][1]=(i+1)%10;
     p[i][3]=(i+2)%10;
     p[i][5]=(i+3)%10;
     p[i][7]=(i+4)%10;
     p[i][9]=(i+5)%10;
    }
 //数表A中有10个数的所有组合,电话表在其中选取
 //数表A的前八列有七十个不同组合,且每个数字在开头结尾各出现一次

 int(*ppt)[8]=new int[15][8];  //为输出建立一个十五行八列的数组B
 for(i=0;i<10;i++)             //将A表的前八列放入B的前十行
     for(j=0;j<8;j++)
         ppt[i][j]=p[i][j];
 
 //电话表的剩余三十种组合在A表的最后三列循环取,可取28种组合
 int k=0;
 for(i=10;i<14;i++)            //将A表的后三列依次放入B表的后四行
     for(j=0;j<8;j++)         
    {
     ppt[i][j]=p[k/3][k%3+7];k++;
     if(j==7)k--;
     }

 ppt[14][0]=9;ppt[14][1]=4;ppt[14][2]=4;   //只剩下9-4,4-4未出现,所以组合起最后一行
 for(i=3;i<8;i++)
     ppt[14][i]=i;


 cout<<"电话号码表是 "<<endl;
 
 for(i=0;i<15;i++)                       //打印电话表
    {
     for(j=0;j<8;j++)
        cout<<ppt[i][j];
     cout<<endl;
    }
}

运行结果:
电话号码表是
01020304
12131415
23242526
34353637
45464748
56575859
67686960
78797071
89808182
90919293
40551662
27738849
99500611
17228339
94434567
Press any key to continue

欢迎来拍
搜索更多相关主题的帖子: 作业 
2008-07-12 14:44
快速回复:我们的一道作业题
数据加载中...
 
   



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

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