[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); } }
|
沒有留言:
張貼留言