输出一组有效并且各不相同的电话号码

poplopki 2009-06-20 08:23:33
编写一个程序,目的是能够输出一组有效并且各不相同的电话号码,条件如下:
电话号码的长度是七位
电话号码的开头一位不能为“0”和“1”
电话号码只能是数字
电话号码必须是一组数字,数字在电话键盘(下图)中产生的顺序就好比国际象棋棋盘中一个棋子移动的轨迹
1 2 3
4 5 6
7 8 9
* 0 #
以上那段所写的程序需要支持任何类型的棋子,但是在这次测试中,您只需要支持国际象棋中“马”的移动轨迹,它移动轨迹的模式和起始点在下图表示:
X X
X X

X X
X X
例如:一个马在数字8上开始,可以移动到数字1或者3。从数字1可以移动到数字6或者8,依此类推。
...全文
53 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
poplopki 2009-06-24
  • 打赏
  • 举报
回复
实现起来还是有问题
learnEmbeddedDev 2009-06-22
  • 打赏
  • 举报
回复
先设计好棋盘, 然后想办法随机, 然后拼凑号码, 个人思想仅供参考
bigbug9002 2009-06-21
  • 打赏
  • 举报
回复

做这样一个二维数组a[9][2]
0 0
6 8
7 9
4 8
3 9
0 0
1 7
2 6
1 3
2 4
for(int i=2;i<5;i++){ //跳过数字0,1
getTelNum(i,7,0);

}
for(int i=6;i<10;i++){ //跳过数字5
getTelNum(i,7,0);
}

long getTelNum(int i,int len,long n){
if(!len){
//这时n就是一个号码,可以输出,也可以存在一个数组中。
}
long num=n*10+i;
getTelNum(a[i][0],len-1,num); //从i找,走日字步,可以走到a[i][0]和a[i][1]
getTelNum(a[i][1],len-1,num);
}
localxiao 2009-06-20
  • 打赏
  • 举报
回复
补充下,上面的判断太复杂了

if((abs((m-i)*(n-j))==2) && (array[m][n]<=9 || array[m][n]>=0))
可读性更好

localxiao 2009-06-20
  • 打赏
  • 举报
回复
没有验证,就是一个想法

横坐标和纵坐标的差的乘积的绝对值为2,然后把中间不需要的点给剔除~
localxiao 2009-06-20
  • 打赏
  • 举报
回复
if((abs((m-i)*(n-j))==2)&&((m!=3&&n!=0)&&(m!=3&&n!=2)))


二维数组储存,i和j是下标
m,n是新下标

循环11次就好了
poplopki 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 neohope 的回复:]
这个可以偷懒的
1.记录1 2 3 4 5 6 7 8 9 0分别可以到达的点
2.从2-9循环递归
[/Quote]
我也是这样想的,可具体代码不太好实现
neohope 2009-06-20
  • 打赏
  • 举报
回复
这个可以偷懒的
1.记录1 2 3 4 5 6 7 8 9 0分别可以到达的点
2.从2-9循环递归
0轰隆隆0 2009-06-20
  • 打赏
  • 举报
回复
想帮你,可我不会下国际象棋呀,呵呵

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧