伪币识别问题

来源:互联网 发布:自然之名酵母水 知乎 编辑:程序博客网 时间:2024/06/14 11:25

 伪币识别问题。一个袋子中装有256枚金币,其中有一枚是伪币,且已知伪币比真的金币要轻。现在给你一架天平,如何快速找出那枚伪币?使用分治策略来对该问题进行求解,设计并实现相应的分治算法。

思路:采用二分法,将一个金币分为A、B两部分,分别计算A、B部分的质量和,因为金币为偶数个且伪币比金币要轻,所以,其中一部分的质量和总比另一部分的质量和小,此时再将质量和小的部分进行二分,递归继续下去。当只剩下两个金币时,记录下质量较小的金币的位置进行输出即可。(但是金币为奇数个时,此办法行不通,因为并没有具体告诉伪币比真币轻的具体数量,如果少一个单位质量,无法进行判断)

package cn.aaa;

public class CSearch {
static int num=0;
public static void BinarySearch(int a[],int left,int right){
int sum1=0,sum2=0;
if(left+1<right){
int mid=(left+right)/2;
for (int i = 0; i < mid; i++) 
sum1 = sum1+a[i];
for (int i = mid; i < right; i++) 
sum2 = sum2+a[i];
if(sum1<sum2)
BinarySearch(a,left,mid);
else
BinarySearch(a,mid+1,right);
}
else if(left+1==right){
if(a[left]<a[right])
num = left;
if(a[left]>a[right])
num = right;
}
else 
num = -1;
}


public static void main(String[] args) {
int a[] = {1,1,1,1,1,1,-1,1};
BinarySearch(a,0,a.length-1);
System.out.println("伪币的位置为:"+(num+1));


}
}

0 0
原创粉丝点击