电话表问题 c++
来源:百度知道 编辑:UC知道 时间:2024/05/24 18:40:05
#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; <