#include <iostream>
#include <math.h>
using namespace std;
#define numnum 14
int coin[numnum] = {
2,2,2,2,2,2,2,2,2,2,1,2,2,2};
/*计算总重量 */
int Weight_Sum(int arr[], int low, int high)
{
int sum = 0;
for (int i = low; i <= high; i++)
sum += arr[i];
return sum;
}
/* 二分法,找出假币数组下标*/
int Weight_Coin2(int coin[], int coinNum, int low, int high)
{
int mid = coinNum/2; //计算中值
int r = coinNum % 2; //求余数,分别处理奇数偶数情况
if (r == 0) //当硬币刚好分为两组时
{
int index = 0;
int A, B;
A = Weight_Sum(coin, low, low + mid - 1);
B = Weight_Sum(coin, low + mid, high);
if (coinNum == 2)
{
if(A<B){
index = low;
}else{
index = low+1;
}
return index;
}
else
{
if (A > B)
{
index = Weight_Coin2(coin, mid, low + mid, high);
return index;
}
else
{
if(A==B){
return high;
}
index = Weight_Coin2(coin, mid, low, mid - 1);
return index;
假币问题(二分法与三分法实现)
最新推荐文章于 2023-12-18 20:48:08 发布