2013年9月9日 星期一

[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);
}
}


 


沒有留言:

張貼留言