求助用C写的程序

lliuxxi 2007-12-05 04:43:15
赛利有12枚银币。其中有11枚真币和1枚假币。假币看起来和真币没有区别,但是重量不同。但赛利不知道假币比真币轻还是重。于是他向朋友借了一架天平。朋友希望赛利称三次就能找出假币并且确定假币是轻是重。例如:如果赛利用天平称两枚硬币,发现天平平衡,说明两枚都是真的。如果赛利用一枚真币与另一枚银币比较,发现它比真币轻或重,说明它是假币。经过精心安排每次的称量,赛利保证在称三次后确定假币。
如果是有n枚银币,其中一枚假币,如果找出?
要求:用分治法来实现假币查找
提示:用数组来存放银币的真假标识,例如:“1”表示真;“0”表示假。
用C语言怎么写?
...全文
214 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyemail19791103 2007-12-06
  • 打赏
  • 举报
回复
称重量的提可真多,呵呵
ChamPagneZ 2007-12-06
  • 打赏
  • 举报
回复
mark
scrutin 2007-12-06
  • 打赏
  • 举报
回复
百度搜索一下称球重量的问题就知道答案了 ,和网上传的那个微软的天平称12个球的答案是一样的
lliuxxi 2007-12-06
  • 打赏
  • 举报
回复
多谢大家帮助,程序我已经写出来了,是在N个钱币下的情况下找到假币的程序,再次感谢大家
yu_xm 2007-12-05
  • 打赏
  • 举报
回复
MS的题
zxg623 2007-12-05
  • 打赏
  • 举报
回复
赛利不知道假币比真币轻还是重!!!
gong19870209 2007-12-05
  • 打赏
  • 举报
回复
4楼的牛!!!!!!
skywarship 2007-12-05
  • 打赏
  • 举报
回复
2楼的不对,呵呵我就是2楼的,该说法里面“然后取假的所在的2组中的1组”这里有一个假设是假币在取出的那一组中,后面的才成立,如果假币不在该组中后面的将不成立。同理6楼的也不对,因为假币比真币轻还是重是不知道的。

支持4楼的解法。
kojie_chen 2007-12-05
  • 打赏
  • 举报
回复
最优解法不是上面的吧,应该是怎么样我也忘了,应该是贪心的算法吧,mark标记
Just4life 2007-12-05
  • 打赏
  • 举报
回复
可以这样,先分成两组,每组6个,称一下,将重量轻的一组拿出(肯定会有一组轻),此时将这6个硬币再分成两组(每组三个)进行比较,取出轻的一组,在这3个中任意取出两个进行比较即可
b_duan 2007-12-05
  • 打赏
  • 举报
回复
支持2楼的说法。
hai040 2007-12-05
  • 打赏
  • 举报
回复
分3组ABC
先A(a1,a2,a3,a4) vs B(b1,b2,b3,b4),相等不用说了
不相等,假设A较轻,a1+C vs a2a3a4+b1b2
若相等假的在b3b4中,也不用说
若a1+C较重,则假的在a2a3a4中且假的较轻,取a2 vs a3可得结果
若a1+C较轻,则假的是a1且假的轻或假的在b1b2中或假的较重,取b1 vs b2也可得结果

n年前就看过的题到今天才想到解法...

用程序还是不会
skywarship 2007-12-05
  • 打赏
  • 举报
回复
仔细考虑了一下,这个解法好像不对,再看看
skywarship 2007-12-05
  • 打赏
  • 举报
回复
说下解法吧,程序慢慢来

把12个金币分4组每组3个,任取其中2组称。若平衡则天平上的两组都是真的,假的在未称的2组中;若不平衡则假的在天平上的2组中,未称的都是真的。然后取假的所在的2组中的1组,将其中2个金币换成真的(现在已知剩下2组是真的),然后将交换后的1组3个金币和3个真的金币称。若平衡则天平上的金币都是真的,假的在换下去的2个中;若不平衡则未换下去的那个金币是假的。如果假的在换下去的2个中,任取其中一个和一个真的称。若平衡则假的是剩下的那个,不平衡则取来称的那个是假的。
hai040 2007-12-05
  • 打赏
  • 举报
回复
没思路,mark先,看看高人怎么解

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧