📄 2007011139_5.cpp
字号:
/********************************************************************************************/
/*在电话语音识别中需要识别电话号码,这需要识别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在结尾出现一次)。*************************************************************/
/*************2007011139*******无76**********张巳龙**************************************/
//由于在设计算法时得出了结果,故直接教给电脑猜法
//只要在赋值过程中按照一定的循环过程不交叉即可很容易得出所要求结果
//这里只给出其中一种
//引用文件声明
#include <iostream>
#include <fstream>
using namespace std;
//由于共有10*10 = 100种连接方法,所以只需要100/7 = 15种数组
int ID[15][8]; //整体变量用来存储号码
//建立号码组的函数
void build_ID_group(void)
{
//首先赋值给前10个号码
//第一个号码是01022030
//这个号码中包含0-1,1-0,0-2,2-2,2-0,0-3,3-0
//往后的号码只需在每一位号码上加1
//这样形成的10个号码即满足开头和结尾分别包含0-10十个不同的数字
//又满足包含70种不同的连接
for (unsigned i = 0; i < 10; i++)
{
ID[i][0] = i;
ID[i][1] = (i + 1)%10;
ID[i][2] = i;
ID[i][3] = (i + 2)%10;
ID[i][4] = (i + 2)%10;
ID[i][5] = i;
ID[i][6] = (i + 3)%10;
ID[i][7] = i;
}
//后5个号码的赋值
//将5个号码从中间分为10个,每个有4位数
//第一个号码为0405
//这个号码中包含0-4,4-0,0-5
//往后的号码只需在每一位上加1
//这样的10个号码包含了30种不同的连接,则所有的100种连接都利用完成了
//然后将每两个4位号码连接城一个8位号码就形成了一个号码
//此时可以不顾及连接问题,因为已经用过所有连接
for (unsigned i = 0; i < 5; i++)
{
ID[i+10][0] = i;
ID[i+10][1] = (i + 4)%10;
ID[i+10][2] = i;
ID[i+10][3] = (i + 5)%10;
ID[i+10][4] = i + 5;
ID[i+10][5] = (i + 9)%10;
ID[i+10][6] = i + 5;
ID[i+10][7] = i;
}
return;
}
void main()
{
ofstream out_file("2007011139_5_output.txt", ios_base::out); //建立输出文件
if (out_file == NULL)
{
cout << "无法建立文件!\n";
return;
}
build_ID_group(); //建立电话号码组
for (unsigned i = 0; i < 15; i++) //输出电话号码组
{
for (unsigned j = 0; j < 8; j++)
out_file << ID[i][j];
out_file << endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -