#include
int findCoin(int coin[],int front,int back) ——coin[]是质量,front是第一个,back是最后一个(按照0——29编号)
{
int i,sumf=0,sumb=0,sum=0;
if(front 1==back)
{
if(coin[front]sumb)
return findCoin(coin,front (back-front)/2 1,back);
} ——两组质量比较,返回质量小的一组
if((back-front 1)%2!=0) ——分为两组,每组(back-front)/2个余1个(剩余奇数个)
{
for(i=front;isumb) ——两组质量比较,返回质量小的一组
return findCoin(coin,front (back-front)/2 1,back);
if(sumf sum==sumb sum) ——直到两组质量相同,剩余的一个为假币,返回编号
return front (back-front)/2 1;
}}
int main()
{
int coin[30]={1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
printf("那个假币是第%d个金币!
",findCoin(coin,0,29));
system("PAUSE");
return 0;}。
全部