#include int getCounterfeitCoin(int coins[], int first, int last) { int firstSum = 0, lastSum = 0; int i; if (first == last - 1) { /* 只剩两枚硬币 */ if (coins[first] < coins[last]) return first; return last; } if ((last - first + 1) % 2 == 0) { /* 偶数枚硬币 */ for (i = first; (1); i++) { firstSum += coins[i]; } for (i = first + (last - first) / 2 + 1; i < last + 1; i++) { lastSum += coins[i]; } if ((2)) { return getCounterfeitCoin(coins, first, first + (last - first) / 2); } else { return getCounterfeitCoin(coins, first + (last - first) / 2 + 1, last); } } else { /*奇数枚硬币*/ for (i = first; i < first + (last - first) / 2; i++) { firstSum += coins[i]; } for (i = first + (last - first) / 2 + 1; i < last + 1; i++) { lastSum += coins[i]; } if (firstSum < lastSum) { return getCounterfeitCoin(coins, first, first + (last - first) / 2 - 1); } else if (firstSum > lastSum) { return getCounterfeitCoin(coins, first + (last - first) / 2 + 1, last); } else { return (3); } } }