說明
現有八枚銀幣a b c d e f g h,已知其中一枚是假幣,其重量不同於真幣,但不知是較輕或較重,如何使用天平以最少的比較次數,決定出哪枚是假幣,並得知假幣比真幣較輕或較重。
解法
單就求假幣的問題是不難,但問題限制使用最少的比較次數,所以我們不能以單純的迴圈比較來求解,我們可以使用決策樹(decision tree),使用分析與樹狀圖來協助求解。
一個簡單的狀況是這樣的,我們比較a+b+c與d+e+f ,如果相等,則假幣必是g或h,我們先比較g或h哪個較重,如果g較重,再與a比較(a是真幣),如果g等於a,則g為真幣,則h為假幣,由於h比g輕而 g是真幣,則h假幣的重量比真幣輕。
完整的比較決策樹如下圖所示:
八枚銀幣
為了方便使用迴圈,使用號碼0至7表示銀幣,範例程式可以讓您輸入假幣重量,但您無法事先得知假幣是哪一枚,程式可得知假幣是哪一枚,且它比真幣輕或重。
class Coins
def initialize
@coins=Array.new(8,10)
end
def set_fake(weight)
@coins[rand(8)]=weight
end
def fake
x=@coins[0]+@coins[1]+@coins[2]
y=@coins[3]+@coins[4]+@coins[5]
a=@coins[0]+@coins[3]
b=@coins[1]+@coins[4]
if x==y
if @coins[6]>@coins[7]
_compare(6,7,0)
else
_compare(7,6,0)
end
elsif x>y
if a == b
_compare(2, 5, 0)
elsif a > b
_compare(0, 4, 1)
else
_compare(1, 3, 0)
end
else
if a == b
_compare(5, 2, 0)
elsif a > b
_compare(3, 1, 0)
else
_compare(4, 0, 1)
end
end
end
def _compare( i, j, k)
if @coins[i] > @coins[k]
print("\n假幣", i + 1, "較重")
else
print("\n假幣", j + 1, "較輕")
end
end
end
print("輸入假幣重量(比 10大或小)")
weight =gets.to_i
coins = Coins.new
coins.set_fake(weight)
coins.fake()
print "\n"
分享到:
相关推荐
【Java编程实现求解八枚银币问题】是一种经典的算法问题,涉及到数据结构和递归的思想。该问题要求找出8枚银币中唯一一枚重量不同的假币,并确定它是比真币重还是轻,同时尽可能减少称量的次数。以下是对这个问题的...
算法是解决特定问题或执行特定任务的一系列步骤或规则的有序集合。在计算机科学中,算法通常用来指导计算机执行特定的任务或解决问题。良好设计的算法能够有效地解决问题,并且在给定的输入下能够产生正确的输出。...
这是我自己写的减治法解八枚硬币问题的程序,需要的同学可以看看
8. 八枚银币问题:类似于八皇后问题,但涉及的是在6x6棋盘上放置8枚银币,要求没有两枚银币在同一条直线上。 9. 生命游戏:这是一款由约翰·康威提出的细胞自动机,通过简单的规则模拟生命的繁衍与死亡。在C语言中...
示例输入`6 8 5 7 8 1 4`展示了马里奥拥有7枚银币,其金额分别为8、5、7、8、1、4。在应用魔法卡后,前半部分的银币(8、5、7)翻倍,后半部分(8、1、4)加1,所以输出结果为`16 10 14 9 2 5`。 整个程序的核心...
在这个问题中,需要找到一种方式将8枚银币在桌上翻转,使得所有银币正面朝上。了解这个问题有助于深入理解图论和组合优化。 4. **字符串匹配**:在`字串核對.mht`中,可能包含了KMP算法或者Boyer-Moore算法等字符串...
八枚银币 生命游戏 字串核对 双色 三色河内塔 背包问题(Knapsack Problem) 数 运算 蒙地卡罗法求 PI Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数 最小公倍数 因式分解 完美数 ...
9.Algorithm Gossip: 八枚银币 18 10.Algorithm Gossip: 生命游戏 20 11.AlgorithmGossip: 字串核对 23 12.Algorithm Gossip: 双色、三色河内塔 25 13.Algorithm Gossip: 背包问题(Knapsack Problem ........
9.Algorithm Gossip: 八枚银币. 10.Algorithm Gossip: 生命游戏. 11.Algorithm Gossip: 字串核对 12.Algorithm Gossip: 双色、三色河内塔 13.Algorithm Gossip: 背包问题(Knapsack Problem 14.Algorithm Gossip: 蒙...
8. 八枚银币(Eight Coins) 八枚银币是一个经典的组合优化问题。问题描述是:给定八枚银币,每枚银币的面值不同,如何使用这些银币组合成某个面值的硬币。解决这个问题的关键是使用动态规划算法,使用动态规划来...
八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题(Knapsack Problem) 数、运算 蒙地卡罗法求 PI Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美...
八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题(Knapsack Problem) 数、运算 蒙地卡罗法求 PI Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 ...
八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题(Knapsack Problem) 数、运算 蒙地卡罗法求 PI Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 ...
八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题(Knapsack Problem) 数、运算 蒙地卡罗法求 PI Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 ...
八枚银币.zip 八皇后.zip 冒泡排序算法.zip 决策树.zip 分块查找.zip 分治算法.zip 剪枝算法.zip 动态栈.zip 动态规划算法.zip 单链表算法.zip 双向链表算法.zip 后序式.zip 哈夫曼树算法.zip 哈希查找.zip 回溯算法...
4. **八枚银币**:这是一个经典的逻辑谜题,涉及如何在不使用任何测量工具的情况下判断哪一枚银币重量不同。这个问题通常用动态规划或者回溯法来解决,通过比较银币重量的组合来找出异常的那枚。 5. **八皇后**:这...
8. **八枚银币问题**:与汉诺塔类似,但有三个目标位置,要求每次移动一枚或两枚银币。此问题可以加深对递归和状态空间搜索的理解。 9. **生命游戏**:由约翰·康威提出,是一个零玩家游戏,其演化规则完全基于初始...
八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题(Knapsack Problem) 数、运算 蒙地卡罗法求 PI Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美...
8. **安全性与合法性**:编写这类脚本时,必须确保不违反微博的使用协议和服务条款,否则可能导致账号被封禁,甚至触犯相关法律法规。 9. **异常处理**:在自动化过程中,需要处理各种可能出现的错误,如网络错误、...
八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题(Knapsack Problem) 数、运算 蒙地卡罗法求 PI Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美...