甲乙讨论数字

Question:

好像是一道微软的面试题:

已知两个1~30之间的数字,甲知道两数之和,乙知道两数之积。 
  甲问乙:"你知道是哪两个数吗?"乙说:"不知道"; 
  乙问甲:"你知道是哪两个数吗?"甲说:"也不知道"; 
  于是,乙说:"那我知道了"; 
  随后甲也说:"那我也知道了"; 
  这两个数是什么? 

 思路:
记得好像原来看过类似的一道题,具体答案忘了,只记得当时想的一些思路,但是当时没有仔细去计算最后的结果,突然心血来潮,就想着是否可以编程计算一下,下面是关于这道题的个人想法:
1)甲问乙:"你知道是哪两个数吗?"乙说:"不知道";
设[1-30] * [1-30]的结果存放于集合Mul(共308个数字)中;
乙知道的是两数之积,那么就可以排除掉Mul中在计算[1-30] * [1-30]时只出现一次的数值,得到可能是两数之积的数值(共104个数字,他们都可以一次以上通过1~30内的数字通过乘法运算得到);因为如果乙通过两数之积得到两个数,那么这两个数的相乘结果在进行[1-30] * [1-30]的运算时只会出现一次,但是乙不知道是哪两个数字,所以我们需要排除掉这些只出现一次的数值。
2)乙问甲:"你知道是哪两个数吗?"甲说:"也不知道";
 对于Mul中的任一数字Mi,我们都能得到Mi的30以内的多个因子对(<a1,b1>……<an,bn>,其中a1*b1 = an*bn = Mi),对于Mul中所有数字的所有因子对进行加法运算,将得到的结果存放于集合Add(共47个数字)中
甲乙都足够聪明,所以我们乙知道结果只能是在Mul中数字的因子对中,那么只需要对这些因子对进行加法运算即可,同样,因为如果甲通过两数之和得到了最终的两个数,那么这两个数(一个因子对)在进行Mul中数字因子对加法运算时,其结果将只出现一次,所以,需要将只出现一次的加法运算结果排除。
3)于是,乙说:"那我知道了";
设这两个数为x和y,x*y = S,x+y = T,那么我们可以知道,S必然存在于1)之后的Mul中,T必然存在于2)之后的Add中;
乙既然此时说他知道了结果,那么Mul中S的因子对(<a1,b1>…<x,y>…<an,bn>)中只有<x,y>的相加结果会出现在Add中,而其余因子对的结果不在Add中,通过最后的遍历就可以得到结果<x,y>。
4)最后一句,其实已经没有必要了,因为两人足够聪明
 
最后按照上述步骤编程之后得到的结果为:1  &&  4。
 
vc2005 Code:
http://files.cnblogs.com/zhoueh1991/FindAandB.zip

转载于:https://www.cnblogs.com/zhoueh1991/p/3684598.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值