八枚银币算法

来源:互联网 发布:淘宝包邮标签怎么设置 编辑:程序博客网 时间:2024/06/09 13:17

  说明现在有八枚银币,已知其中一枚是假币,其重量不用于真币,
 但不知道是较轻还是较重,如何使用天平以最少的比较次数,决定
 出哪枚是假币,并得知假币是较轻还是较重。



#include <stdio.h>#include <stdlib.h>#include <time.h>void finallycompare(int coins[], int i, int j, int k){if(coins[i]>coins[k]){printf("第%d枚银币为假币,较重。",i+1);}else{printf("第%d枚银币为假币,较轻。",j+1);}}void compareeightcoins(int coins[]){if(coins[0]+coins[1]+coins[2]==coins[3]+coins[4]+coins[5]){if(coins[6]>coins[7]){finallycompare(coins,6,7,0);}else{finallycompare(coins,7,6,0);}}if(coins[0]+coins[1]+coins[2]>coins[3]+coins[4]+coins[5]){if(coins[0]+coins[3]==coins[1]+coins[4]){finallycompare(coins,2,5,0);}if(coins[0]+coins[3]>coins[1]+coins[4]){finallycompare(coins,0,4,1);}if(coins[0]+coins[3]<coins[1]+coins[4]){finallycompare(coins,1,3,0);}}if(coins[0]+coins[1]+coins[2]<coins[3]+coins[4]+coins[5]){if(coins[0]+coins[3]==coins[1]+coins[4]){finallycompare(coins,5,2,0);}if(coins[0]+coins[3]>coins[1]+coins[4]){finallycompare(coins,3,1,0);}if(coins[0]+coins[3]<coins[1]+coins[4]){finallycompare(coins,4,0,1);}}}int main(){int coins[8];int i;srand(time(NULL));for(i=0;i<8;i++){coins[i]=10;}printf("请输入假币的重量(比10大或小) : ");scanf("%d", &i);coins[rand()%8]=i;compareeightcoins(coins);printf("列出所有银币重量:\n");for(i=0;i<8;i++){printf(" %d ", coins[i]);}printf("\n");return 0;}


原创粉丝点击