#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int CalcSum(int* pArray,int StartPos,int EndPos);
int FakeCoinWeight(int* pArray,int length);
int main(void)
{
int ArrayData[24]={4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4};
int length=24;
int* pArrayData=ArrayData;
int fakeCoinWeight=FakeCoinWeight(pArrayData,length);
printf("fakeCoinWeight=%d\n",fakeCoinWeight);
// 等待用户输入任意一键返回 ...
system( "PAUSE" );
return 0;
}
int FakeCoinWeight(int* pArray,int length)
{
if (length%2 ==0)
{
int leftStartPos=0;
int leftEndPos=length/2-1;
int rightStartPos=length/2;
int rightEndPos=length-1;
int leftWeight=CalcSum(pArray,leftStartPos,leftEndPos);
int rightWeight=CalcSum(pArray,rightStartPos,rightEndPos);
if (leftWeight<rightWeight)
{
int* pArrayData=&pArray[leftStartPos];
length=leftEndPos-leftStartPos+1;
if (length==1)
{
return pArray[leftEndPos];
}
else
{
return FakeCoinWeight(pArrayData,length);
}
}
else
{
int* pArrayData=&pArray[rightStartPos];
length=rightEndPos-rightStartPos+1;
if (length==1)
{
return pArray[rightEndPos];
}
else
{
return FakeCoinWeight(pArrayData,length);
}
}
}
else
{
if (length==1)
{
return pArray[0];
}
else
{
if (pArray[0]<pArray[1])
{
return pArray[0];
}
else
{
return FakeCoinWeight(&pArray[1],length-1);
}
}
}
}
int CalcSum(int* pArray,int StartPos,int EndPos)
{
int sum=0;
for (int i=StartPos;i<=EndPos;i++)
{
sum += pArray[i];
}
return sum;
}
/*
fakeCoinWeight=3
请按任意键继续. . .
*/