递归分治二分查找法
2:
int high)
4: {
int i, sum1 = 0, sum2 = 0, sum3 = 0;
6:
if(low + 1 == high)
8: {
return low + 1;
return high + 1;
11: }
12:
/*n是偶数*/
14: {
for(i = low; i <= low + (high - low) / 2; i++)
/*前半段和*/
17:
for(i = low + (high - low) / 2 + 1; i <= high; i++)
/*后半段和*/
20:
return getFalseCoin(coin, low, low + (high - low) / 2);
22:
return getFalseCoin(coin, low + (high - low) / 2 + 1, high);
24: }
25:
if((high - low + 1) % 2 != 0)
27: {
for(i = low; i <= low + (high - low) / 2 - 1; i++)
/*前半段和*/
30:
for(i = low + (high - low) / 2 + 1; i <= high; i++)
/*后半段和*/
33:
34: sum3 = coin[low+(high-low)/2];
35:
if(sum1 < sum2)
return getFalseCoin(coin, low, low + (high - low) / 2 - 1);
38:
if(sum1 > sum2)
return getFalseCoin(coin, low + (high - low) / 2 + 1, high);
41:
return low + (high - low) / 2 + 1;
43: }
44:
45: }
46:
int main()
48: {
int coin[30] = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2};
, getFalseCoin(coin, 0, 29));
return 0;
52: }