Algorithm Gossip:八枚银币

来源:互联网 发布:kmeans算法 编辑:程序博客网 时间:2024/05/19 22:24
/**************************************** *  File Name  : arithmetic.c *  Creat Data : 2015.1.31*  Author     : ZY *****************************************/ /*Algorithm Gossip:八枚银币*//*现有八枚银币a,b,c,d,e,f,g,h,已知其中一枚是假币,其重量不同于真币,但不知是较轻或较重,如何使用天平以最少的次数比较,决定出哪枚是假币,并得知假币比真币较轻或较重*//*使用决策树(decision tree),使用分析与树状图来协助求解。先比较a+b+c与d+e+f,若相等,则假币必为g或h,我们先比较g或h哪个较重,若g较重,再与a比较,如果a,g相等,则g为真币,h为假币。*/#include <stdio.h>#include <stdlib.h>#include <time.h>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 eightcoins(int coins[]){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);}else 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);}else if(coins[0]+coins[3] < coins[1]+coins[4]){compare(coins,4,0,1);}}}int main(void){int coins[8] = {0};int i;srand(time(NULL));//随机数for(i = 0;i < 8;i++){coins[i] = 10;}printf("\n输入假币的重量(比10大或小):");scanf("%d",&i);coins[rand()%8] = i;//随机数eightcoins(coins);printf("\n\n列出所有钱币重量:");for(i = 0;i < 8;i++){printf("%d ",coins[i]);}printf("\n");return 0;}

0 0
原创粉丝点击