
1 sunfan314 2018-11-12 11:44:13 +08:00 每个人维护一个自己可能的数的数组 所有人说完之后 每个人的数组中应该只包含 9 个数 对第一个人的数组进行遍历 假设第一个人的数 1,那么之后 11 个人的数组中都应该去除 1 这种遍历方式下 一般到最后几个人的数组大小就很小了 遍历的情况会少很多 |
2 mathzhaoliang 2018-11-12 11:49:12 +08:00 如果问题的要求是每个人随便说三个与自己不同的数字,那么答案是不能。 |
3 mathzhaoliang 2018-11-12 11:50:32 +08:00 @sunfan314 你认真分析过复杂度吗? |
4 zynlp 2018-11-12 12:23:58 +08:00 via iPhone 不能,你把规模缩到 3 个人,每个人说一个数,有时会出现两个候选情况满足。 |
5 zynlp 2018-11-12 12:32:19 +08:00 via iPhone 可以试试,先建个有向图,判断有没有环 |
6 Nimrod 2018-11-12 13:10:05 +08:00 via Android 粗想了下不行,看看有没有大佬能说清楚 |
8 sunfan314 2018-11-12 13:11:16 +08:00 这个问题实质感觉是和数独问题是一样的,所以未必有解 但是 12 个人每个人只说三个数其实有解甚至有很多解的概率也是很大的 |
9 cdwyd 2018-11-12 13:16:53 +08:00 via Android 不能,极端考虑一下 1 号报数:3 4 5 2 号报数:3 4 5 其他人从不是 1 2 和自身的数里面随便选 3 个,这样至少是分不出来谁是 1 谁是 2 |
10 upczww 2018-11-12 13:26:19 +08:00 1 234 2 134 3 124 4 123 5 123 6 123 7 123 8 123 9 123 10 123 11 123 12 123 来猜猜看? |
11 ccpp132 2018-11-12 13:29:11 +08:00 搜索就行了,有多种解就多种解呗。 要问这个问题最好的做法,如果 LZ 想研究的话,可以去看看 Knuth 的论文《 Dancing Links 》 |
12 kx5d62Jn1J9MjoXP 2018-11-12 13:29:32 +08:00 不能 1~6 号说自己不是 10, 11, 12 7~12 号说自己不是 1, 2, 3 这样至少有 6! * 6!种可能性 |
13 inhzus 2018-11-12 13:30:43 +08:00 提供一个思路 回溯法 递归实现 自己没写代码, 感觉应该行得通, 就是还是很复杂. 不过至少比 for 循环好看, 能解决楼主遍历数太多的痛点 |
15 trueGate 2018-11-12 13:46:39 +08:00 把问题看做 12*12 的数独棋盘,每行每列有且只有一个元素。用二维数组来做 |
16 vvvv OP 学习了,感谢楼上各位大佬~ |