问题:有八枚银币,其中七枚的质量相等,有一个天平,可以进行称量。
请找出另外一枚,并且判断这一枚是比其他的重,还是轻,并且!比较次数最少
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<iostream>
using namespace std;
void compare(int[], int, int, int);
void eightcoins(int[]);
int main(void) {
//八枚币
int coins[8] = { 0 };
int i;
//时间打乱
srand(time(NULL));
//对银币给出初始值;
for (i = 0; i < 8; i++)
coins[i] = 10;
cout << "银币重量,比10大或小:";
cin>>i;
//随机选取位置覆盖
coins[rand() % 8] = i;
//函数挑选
eightcoins(coins);
cout << "所以银币重量:" << endl;
for(i = 0; i < 8; i++)
printf("%d ", coins[i]);
printf("\n");
system("pause");
return 0;
}
void compare(int coins[], int i, int j, int k) {
if (coins[i] > coins[k])
cout << i + 1 << "个重" << endl;
else
cout << j + 1 << "个轻" << endl;
}
void eightcoins(int coins[]) {
//先抓取三个于三个比较,剩下2个,如果前者相等,则必在6,7里面
if (coins[0] + coins[1] + coins[2] == coins[3] + coins[4] + coins[5])
{
if (coins[6] > coins[7])
//由于不知道到底是哪个,而且不知道是重是轻;所以需要判断两次;后面的都是这个循环了好吧!
compare(coins, 6, 7, 0);
else compare(coins, 7, 6, 0); }
else if (coins[0] + coins[1] + coins[2] > coins[3] + coins[4] + coins[5])
{
if (coins[0] + coins[3] == coins[1] + coins[4])
compare(coins, 2, 5, 0);
else if (coins[0] + coins[3] > coins[1] + coins[4])
compare(coins, 0, 4, 1);
if (coins[0] + coins[3] < coins[1] + coins[4])
compare(coins, 1, 3, 0);
}
else if (coins[0] + coins[1] + coins[2] < coins[3] + coins[4] + coins[5])
{
if (coins[0] + coins[3] == coins[1] + coins[4])
compare(coins, 5, 2, 0);
else if (coins[0] + coins[3] > coins[1] + coins[4])
compare(coins, 3, 1, 0);
if (coins[0] + coins[3] < coins[1] + coins[4])
compare(coins, 4, 0, 1);
}
}