[C/C++ 演算法]- 八枚銀幣

[C/C++ 演算法]- 八枚銀幣

[C/C++ 演算法]- 八枚銀幣


剛才找資料時發現一個C/C++的教學網站,趕快發揮(C/P)的長才將它備份來,有需要的同好,歡迎來(C/P)一下^^。

拷貝來源:
http://openhome.cc/Gossip/AlgorithmGossip/
http://openhome.cc/Gossip/AlgorithmGossip/EightCoins.htm

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void compare(int[], int, int, int);
void fake(int[]);
int main(void) {
srand(time(NULL));
int coins[8] = {0};
int i;
for(i = 0; i < 8; i++) {
coins[i] = 10;
}
printf("\n輸入假幣重量 ( 比10大或小 ):");
int input;
scanf("%d", &input);
coins[rand() % 8] = input;
fake(coins);
printf("\n\n列出所有錢幣重量:");
for(i = 0; i < 8; i++) {
printf("%d ", coins[i]);
}
return 0;
}
void compare(int coins[], int i, int j, int k) {
if(coins[i] > coins[k]) printf("\n假幣 %d 較重", i + 1);
else                    printf("\n假幣 %d 較輕", j + 1);
}
void fake(int coins[]) {
int c1 = coins[0] + coins[1] + coins[2] - coins[3] - coins[4] - coins[5];
int c2 = coins[0] + coins[3] - coins[1] - coins[4];
if(!c1) {
if(coins[6] > coins[7]) compare(coins, 6, 7, 0);
else                    compare(coins, 7, 6, 0);
}
else if(c1 > 0) {
if(!c2)                 compare(coins, 2, 5, 0);
else if(c2 > 0)         compare(coins, 0, 4, 1);
else                    compare(coins, 1, 3, 0);
}
else {
if(!c2)                 compare(coins, 5, 2, 0);
else if(c2 > 0)         compare(coins, 3, 1, 0);
else                    compare(coins, 4, 0, 1);
}
}

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *