您的位置:首页 > 其它

分治法-找硬币的游戏

2018-03-30 00:20 176 查看
哎呀,估计是闲得蛋疼,竟然接下了朋友的算法题,呵呵,结果整个就是一打脸,递归,我的痛呀!搞了半天,重新学习了一下分治算法(其中的快速排序),当然今天是以一个例子---找假币的游戏,来说明一下分治算法的原理过程。
废话不多说,直接上代码。(好吧,我已经说了好多废话,不差下面几句了。)
题目:已经有10枚硬币,其中有一枚假币,且假币的质量比真币的要小,求假币的位置?
#include<stdio.h>
#include<conio.h>
#define N 10

int FindCorn(int l[],int low,int high)
{
int sum1,sum2,i,j=0;
int length=high-low+1;
if(length%2==0)
{
length=length/2;
for(i=low,j=low+length;(i<=low+length-1)&&(j<=high);i++,j++)
{
sum1=sum1+l[i];
sum2=sum2+l[j];
}
if(sum1>sum2){FindCorn(l,low+length,high);}
else {FindCorn(l,low,low+length-1);}
}
else
{
length=length/2;
for(i=low,j=low+length+1;(i<=low+length-1)&&(j<=high);i++,j++)
{
sum1=sum1+l[i];
sum2=sum2+l[j];
}
if(sum1==sum2) return low+length;
if(sum1>sum2) {FindCorn(l,low+length+1,high);}
else{FindCorn(l,low,low+length-1);}
}
}

void main()
{
int i;
int corn
= { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 };
i=FindCorn(corn, 0, N-1);
printf("假币的位置是%d",i+1);
getch();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: