簡介
找出偽幣問題
利用遞迴與分治演算法實現
題目: 裝有
1 6個硬幣的袋子。
1 6個硬幣中有乙個是偽造的,並且那個偽造的硬幣比真的硬幣要輕一些。我們要找出這個偽造的硬幣。我們有一台可用來比較兩組硬幣重量的儀器,利用這台儀器,可以知道兩組硬幣的重量是否相同.
解決思路: 將
16個硬幣分為
a,b兩堆,進行比較。如果
a堆輕的話,在從
a堆中分為
aa,ab
兩堆進行比較。知道找出偽幣為止。
/*** 遞迴與分治演算法----找出偽幣問題
* @param arr 偽幣陣列
* @param from 起始位置
* @param to 截止位置
* @return 偽幣下標 -1 為沒有偽幣
*/public static int binarysearch(int arr,int from,int to)else
for(int j=tomin;j<=to;j++)
//如果 總和相等 返回 -1 未查到
if(sumfrom ==sumto)
// 如果不相等,小的總和 進行遞迴
result = sumfrom-sumto>0?binarysearch(arr,tomin,to):binarysearch(arr,from,frommax);
}return result;}}
演算法 找出偽幣
題目 給你乙個裝有1 6個硬幣的袋子。1 6個硬幣中有乙個是偽造的,並且那個偽造的硬幣比真的硬幣要輕一些。你的任務是找出這個偽造的硬幣。為了幫助你完成這一任務,將提供一台可用來比較兩組硬幣重量的儀器,利用這台儀器,可以知道兩組硬幣的重量是否相同。比較硬幣1與硬幣2的重量。假如硬幣1比硬幣2輕,則硬幣...
偽幣識別問題
偽幣識別問題。乙個袋子中裝有256 枚金幣,其中有一枚是偽幣,且已知偽幣比真的金幣要輕。現在給你一架天平,如何快速找出那枚偽幣?使用分治策略來對該問題進行求解,設計並實現相應的分治演算法。思路 採用二分法,將乙個金幣分為a b兩部分,分別計算a b部分的質量和,因為金幣為偶數個且偽幣比金幣要輕,所以...
找出單身狗問題
題目 乙個陣列中只有兩個數字是出現一次,其他所有數字都出現了兩次,找出這兩個只出現一次的數字。要求 時間複雜度o n include void find1 int a,int n,int num 排序結果為1 1 2 2 3 4 5 5 6 6 int sign 0 i 0 int k 0 whil...