递归-分治 找出伪币的重量(不是位置)

#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
请按任意键继续. . .
*/

 

posted @ 2018-01-31 10:20  sky20080101  阅读(74)  评论(0)    收藏  举报