#include<stdio.h>
#define MAXNUM 100 //硬币最大数量
int Find_false_coin(int c[],int low,int high)
{
int i,sum1=0,sum2=0;
if(high-low==1) //只剩下两个硬币时比较重量大小,得到结果,函数调用结束
return c[low]<c[high]?low:high;
else if(((high-low)+1)%2==0) //硬币数量为偶数,分成两份
{
for(i=low;i<low+(high-low+1)/2;i++)
sum1+=c[i];
for(i=(high-low+1)/2;i<=high;i++)
sum2+=c[i];
if(sum1<sum2)
return Find_false_coin(c,low,low+(high-low)/2);
else
return Find_false_coin(c,low+(high-low+1)/2,high);
}
else //硬币数量为奇数,分成三份
{
for(i=low;i<(high-low)/2;i++)
sum1+=c[i];
for(i=(high-low)/2+1;i<=high;i++)
sum2+=c[i];
if(sum1<sum2)
return Find_false_coin(c,low,(high-low)/2-1);
else if(sum1>sum2)
return Find_false_coin(c,(high-low)/2+1,high);
else
return (high-low)/2;
}
}
void main()
{
int n,i;
int coin[MAXNUM];
printf("请输入硬币的数量:\n");
scanf("%d",&n);
printf("请输入每个硬币的重量:\n");
for(i=0;i<n;i++)
scanf("%d",&coin[i]);
printf("假币的索引是:%d",Find_false_coin(coin,0,n-1)); //得到假币的下标
}
在n个硬币中找出假币
最新推荐文章于 2022-12-20 16:36:22 发布