【智力题】 4红牌、4蓝牌算法实现
来源:互联网 发布:流川枫和苍井空 知乎 编辑:程序博客网 时间:2024/05/02 09:18
有4 张红色的牌和4 张蓝色的牌,主持人先拿任意两张,再分别在 A、B、C 三人额头上贴任意两张牌,A、
B、C 三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,A 说不知道,B
说不知道,C 说不知道,然后 A 说知道了。
如何推理,A 是怎么知道的。如果用程序,又怎么实现呢?
推理过程
推理过程比较复杂,没有代码好理解
代码思路:
首先是三个人的第一反应都是不知道,所以任意两个人头上的同色牌个数不等于4,称这些组合成为合法组合。
然后是A说他知道了,说明B和C确定的情况下,A的合法组合只有一种可能。
因为A、B说不知道的情况下,C 没有说知道了,说明C都与A组合情况是不相同的。因为如果C和A相同,C此时和A最后掌握的信息一样多,C就能和A一样推断出自己的颜色。
int main(int argc, char *argv[]){ vector<vector<int>> vec = { { 0, 2 }, { 2, 0 }, { 1, 1 } }; vector<int> A, B, C, retArr; int count(0); for (auto i = 0; i < 3; i++) { C = vec[i]; for (auto j = 0; j < 3; j++) { B = vec[j]; count = 0; for (auto k = 0; k < 3; k++) { A = vec[k]; // 判断是否满足任意两个人头上的牌同色等于4 if (A[0] + B[0] < 4 && A[0] + C[0] < 4 && B[0] + C[0] < 4 && A[1] + B[1] < 4 && A[1] + C[1] < 4 && B[1] + C[1] < 4) { retArr = A; count++; } } // 确认对面两人的牌色,自己的牌色是否只有一种组合,如果成立,这就是结果。 if (count == 1 && (C[0] != retArr[0] || C[1] != retArr[1])) { cout << retArr[0] << retArr[1] << endl; } } } return 0;}
阅读全文
0 0
- 【智力题】 4红牌、4蓝牌算法实现
- 4红牌、4蓝牌算法实现
- 智力题4
- 智力题 4
- 红牌
- 算法智力题
- 智力题(4)
- 智力题 - 盛4升水
- 程序员面试智力题 (4)
- 智力题小结(4)
- 智力题——23.蓝额头房间
- 世界杯-穆勒帽子戏法佩佩红牌 德国4-0十人葡萄牙
- 智力题算法题
- 蓝桥4-1训练
- 蓝桥-算法-队列
- 蓝桥-算法-栈
- 蓝桥-算法-枚举
- 【u120】红牌
- Android,iOS,Java,C#,C++,PHP,大数据等学习资料干货分享
- 未能加载文件或程序集“MySql.Data, Version=6.8.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项
- JMeter接口测试实战-接口分析
- ICCV2017论文“Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks” 阅读笔记
- 基于SIFT点特征匹配的图像配准MATLAB程序
- 【智力题】 4红牌、4蓝牌算法实现
- 技术人如何才能做好绩效管理提升团队绩效?
- JVM性能分析与定位
- Nginx Rtmp Learing 之HTTP HOOK回调及unix socket使用
- 基于 Gensim 的 Word2Vec 实践
- js多维数组渲染HTML js for循环渲染页面
- 【binary-tree-maximum-path-sum】
- 三,创建项目
- AMD-SDK的学习[1]--AdvancedConvolution