趣味算法-寻找假硬币
8枚硬币,一枚假的,假的比真的少轻,通过程序寻找假硬币。
采用分治算法:
1) 硬币分2组,找出比较轻的一组。
2) 再把稍轻的一组继续分为2组,再找出稍轻的一组。
3) 直至比较2个硬币为止。
#include <stdio.h>
int checkcoin(int arrCoin[], int nStart, int nEnd)
{
int nMid = (nStart+nEnd)/2;
int nResult;
if (nStart == nEnd)
{
return -1;
}
if (nEnd - nStart == 1)
{
if (arrCoin[nStart] < arrCoin[nEnd])
{
return nStart;
}
else if (arrCoin[nStart] > arrCoin[nEnd])
{
return nEnd;
}
}
else
{
nResult = checkcoin(arrCoin, nStart, nMid);
if (nResult != -1)
return nResult;
nResult = checkcoin(arrCoin, nMid, nEnd);
if (nResult != -1)
return nResult;
}
return -1;
}
int main()
{