#include<stdio.h>
#include<stdlib.h>
#include<time.h>
static int CalcSum(int* pArray,int StartPos,int EndPos);
static int FakeCoinPos(int* pArray,int length,int StartPos);
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 StartPos=0;
int fakeCoinPos=FakeCoinPos(pArrayData,length,StartPos);
printf("fakeCoinPos=%d\n",fakeCoinPos);
// 等待用户输入任意一键返回 ...
system( "PAUSE" );
return 0;
}
static int FakeCoinPos(int* pArray,int length,int StartPos)
{
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;
int newStartPos=StartPos+leftStartPos;
if (length==1)
{
return StartPos+leftEndPos;
}
else
{
return FakeCoinPos(pArrayData,length,newStartPos);
}
}
else
{
int* pArrayData=&pArray[rightStartPos];
length=rightEndPos-rightStartPos+1;
int newStartPos=StartPos + rightStartPos;
if (length==1)
{
return StartPos + rightEndPos;
}
else
{
return FakeCoinPos(pArrayData,length,newStartPos);
}
}
}
else
{
if (length==1)
{
return StartPos+0;
}
else
{
if (pArray[0]<pArray[1])
{
return StartPos+0;;
}
else
{
return FakeCoinPos(&pArray[1],length-1,StartPos+1);
}
}
}
}
static int CalcSum(int* pArray,int StartPos,int EndPos)
{
int sum=0;
for (int i=StartPos;i<=EndPos;i++)
{
sum += pArray[i];
}
return sum;
}
/*
fakeCoinPos=15
请按任意键继续. . .
*/