注册 登录
编程论坛 C语言论坛

老问题 电脑猜四位数想了一个礼拜还是不会

L18089895489 发布于 2020-04-17 10:32, 2518 次点击
人和机器做猜数游戏。人默想一个四位数,由计算机来猜。计算机将所猜的数显式到屏幕上,人通过键盘告诉计算机几个数字猜对了,几个位置猜对了。计算机一次又一次地猜,直到猜对数字为止
10 回复
#2
lin51616782020-04-17 11:05
先测试 0000 1111 22222 ....9999
可以得出4位数字分别是什么
剩下的只是一个全排列

[此贴子已经被作者于2020-4-17 11:09编辑过]

#3
L180898954892020-04-17 11:16
回复 2楼 lin5161678
可以具体一些吗
#4
lin51616782020-04-17 12:07
比如结果是2345
程序猜测0000 你回复全错
程序猜测1111 你回复全错
程序猜测2222 你回复对1个
程序就知道4位数里面一定有一个2
以此类推 能找到4位数是 2345这4个数字组成的
但是不知道顺序
后面就全排列找出全部顺序
就完成了
#5
wmf20142020-04-17 13:22
这个题目有点意思,是简单的人工智能,要剪枝的,应该是https://bbs.bccn.net/thread-500788-1-1.html这个问题的逆问题,四位数输入应该不能相同。可以设计成电脑出题电脑猜,免除人工输入的烦恼。
据说有公式:8步内猜中,拿到这个方法就好写代码了。我人工猜经常超出10步以上。

[此贴子已经被作者于2020-4-17 13:26编辑过]

#6
fulltimelink2020-04-17 13:23
以下是引用lin5161678在2020-4-17 12:07:13的发言:

比如结果是2345
程序猜测0000 你回复全错
程序猜测1111 你回复全错
程序猜测2222 你回复对1个
程序就知道4位数里面一定有一个2
以此类推 能找到4位数是 2345这4个数字组成的
但是不知道顺序
后面就全排列找出全部顺序
就完成了

找到一个之后,直接定位其位置是不是能减少尝试的次数,
比如能过1111 找到aa1a   
下次直接尝试 2212 是不是>=2即可
这样尝试次数应该小于全排的
#7
lin51616782020-04-17 13:35
回复 6楼 fulltimelink
你怎么找 aa1a
#8
fulltimelink2020-04-17 13:44
回复 7楼 lin5161678
当猜对数字的量  和  猜对位置的量一样的时候
eg.  四个数字只有1个1时
aa1a
用户应该会输入 1  1   其他情况应该是 1   0
#9
lin51616782020-04-17 13:55
以下是引用fulltimelink在2020-4-17 13:44:05的发言:

当猜对数字的量  和  猜对位置的量一样的时候
eg.  四个数字只有1个1时
aa1a
用户应该会输入 1  1   其他情况应该是 1   0

你的想法得保证 aaa 不属于4个数字中的一个
#10
fulltimelink2020-04-17 14:02
回复 9楼 lin5161678
嗯,a就是字母‘a'...   我是当字符串处理的,判断 位置的时候,左移位8 (新位还写入'a')
a也可以用第一个4同数字检测为0的数字也可以,这样也能用数字的形式
#11
lin51616782020-04-17 14:08
回复 10楼 fulltimelink
不能给出字母a
1