复杂问题的假币算法.docx
文本预览下载声明
思路如下:Check_coin(a[8])//实现查找8枚硬币中的假币位置,并且判断假币比真币重还是轻//输入一个整数a[8]//输出假币在数组的位置i,并且输出Leigh or Heavy如果两个硬币进行比较,H保留较重硬币的下标,L保留较轻下标拿较重硬币与真币进行比较:如果比真币重,则返回这个硬币下标,并且返回Heavy;否则返回另一个硬币下标,并且返回Light;#include stdio.hint flag=0;int sum_coin(int a[],int from,int to){ int i,sum=0; for(i=from;i=to;i++) sum+=a[i]; return sum;}int check_coin(int a[],int from,int to){ int i,H,L; i=(to+1)%8; if(a[from]a[to]) { H=from; L=to; } else { H=to; L=from; } if(a[H]a[i]) { flag=1; return H; } else { flag=-1; return L; }}main(){ int a[8]; int i,p; for(i=0;i8;i++) { printf(a[%d]=,i); scanf(%d,a[i]); } if(sum_coin(a,0,2)==sum_coin(a,3,5)) p=check_coin(a,6,7); else { if(sum_coin(a,0,2)sum_coin(a,3,5)) {if((a[0]+a[4])(a[3]+a[1])) p=check_coin(a,0,3);else{ if((a[0]+a[4])==(a[3]+a[1])) p=check_coin(a,2,5); else p=check_coin(a,1,4); } } else { if((a[0]+a[4])(a[3]+a[1])) p=check_coin(a,1,4); else { if((a[0]+a[4])==(a[3]+a[1])) p=check_coin(a,2,5); else p=check_coin(a,0,3);} } } if(flag==1) printf(the false coin is Heavy.\n); else printf(the false coin is Light.\n); printf(the false coin is %d.\n,p); system(pause);}
显示全部