四人过桥——微软题的计算机模拟算法
2009-08-24 18:56
711 查看
问题:四人夜过桥,步行时间分别为 1、2、5、10 分钟,四人只有一台手电筒,一趟最多两人过桥,一趟过桥须持手电筒,时间以最慢者计,问 17 分钟内可否过桥,如何过桥?
运行可知 17 分种有两解,变更 TimeLimit 值便可求得其它限定时间情况下的解。
参考:
《“人狼羊草”的计算机模拟的暴力枚举》
《生日悖论的泛化问题的讨论》
《智力题:将 4444 的 4444 次方连三次求位数和之数》
《ABCD*E=DCBA》
《对百度百科的疑问:水仙花数的上界是不是卡得太紧了?》
《独一无二的 153 ?竟然没有可与之比肩的第二个数了么?》
《解析 Miller - Rabin 素数测试思想》
《C++ 0x(C++ 09)新标准全部革新提案文档列表》
数学分类
《微软全部产品整理》
《我眼中的微软大战略和中国软件之殇》
《我眼中的 F# 的前景和 C# 的失败》
#define STATE char #define PATH char const int TimeLimit = 17; STATE State[16] = { 1 }; PATH Path[16]; const int Cop[10] = { 1, 2, 4, 8, 3, 5, 9, 6, 10, 12 }; const char* Cops[10] = { "1,耗时 1 分", "2,耗时 2 分", "5,耗时 5 分", "10,耗时 10 分", "1 和 2,耗时 2 分", "1 和 5,耗时 5 分", "1 和 10,耗时 10 分", "2 和 5,耗时 5 分", "2 和 10,耗时 10 分", "5 和 10,耗时 10 分" }; const int Time[10] = { 1, 2, 5, 10, 2, 5, 10, 5, 10, 10 }; void Ferry ( int state, int dir, int p, int time ) { int i, cop, j; for ( i = 0; i < 10; i++ ) { if ( Cop[i] != (cop = state & Cop[i] ) ) continue; state &= ~cop; time += Time[i]; if ( State[ dir ? ~state & 15 : state ] || time > TimeLimit ) { state |= cop; time -= Time[i]; } else if ( dir && !state ) { Path[p] = i; printf ( "过桥过程,共往返 %d 次:/n", p + 1 ); for ( j = 0; j <= p; j++ ) printf ( "%s: %s/n", ( j & 1 ? "右往左" : "左往右" ), Cops[Path[j]] ); printf ( "/n" ); break; } else { State[ dir ? ~state & 15 : state ] = 1; Path[p] = i; Ferry ( ~state & 15, !dir, p + 1, time ); State[ dir ? ~state & 15 : state ] = 0; time -= Time[i]; state |= cop; } } } // 调用时 Ferry ( 15, 1, 0, 0 );
运行可知 17 分种有两解,变更 TimeLimit 值便可求得其它限定时间情况下的解。
参考:
《“人狼羊草”的计算机模拟的暴力枚举》
《生日悖论的泛化问题的讨论》
《智力题:将 4444 的 4444 次方连三次求位数和之数》
《ABCD*E=DCBA》
《对百度百科的疑问:水仙花数的上界是不是卡得太紧了?》
《独一无二的 153 ?竟然没有可与之比肩的第二个数了么?》
《解析 Miller - Rabin 素数测试思想》
《C++ 0x(C++ 09)新标准全部革新提案文档列表》
数学分类
《微软全部产品整理》
《我眼中的微软大战略和中国软件之殇》
《我眼中的 F# 的前景和 C# 的失败》
相关文章推荐
- 模拟简单距离向量算法的更新——计算机网络作业
- HNNU 11656 错误的算法【 湖南省第十一届大学生计算机程序设计竞赛,模拟】
- 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A,B,C,D表示,当选某候选人时,直接输入其编号(编号由计算机随机产生,若输入的不是A,B,C,D则视为无效票,选举结束后按得票数从高到底输出候选人编号和所得票数.
- 微软研发计算机算法 语音识别率达88.9%
- 算法分析与设计课程资料:蚂蚁算法的初步研究与计算机模拟
- 计算机视觉逼近拐点,微软算法正跨越“一步之遥”
- C++队列模拟银行排队叫号(加州大学伯克利分校计算机专业数据结构与算法作业)
- 关于微软面试题:"四人过桥"问题的思考——“n人过桥”问题的演进(Java实现)
- 四人过桥-微软面试逻辑题
- 关于微软面试题:"四人过桥"问题的思考——“n人过桥”问题的演进(Java实现)
- 计算机视觉中经常需要识别或者定位某些几何图形,比如直线、圆、椭圆,还有其他一些图形。检测直线的霍夫变换提供了在图像中寻找直线的一种算法,是最简单的一种情形,后来发展到检测圆、椭圆、还有一般图形的霍夫变
- 算法题21 最快过桥问题
- 微软过桥问题的图论解法
- 2018年全国多校算法寒假训练营练习比赛(第一场) - D - N阶汉诺塔变形(模拟)
- 大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft Naive Bayes 算法)
- 微软过桥问题与测试人员素养
- 微软的22道数据结构算法题(含答案)
- 微软算法100题_引言_zpc版_摘自csdn JULY
- 2012下半年版无忧全国计算机等级考试超级模拟软件DVD合集三级PC技术部分上机练习第33套题汇编运行结果
- 微软算法100道题------判断俩个链表是否相交