复杂问题的假币算法由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“假币问题的三分算法”。
思路如下:
Check_coin(a[8])//实现查找8枚硬币中的假币位置,并且判断假币比真币重还是轻 //输入一个整数a[8] //输出假币在数组的位置i,并且输出Leigh or Heavy 如果两个硬币进行比较,H保留较重硬币的下标,L保留较轻下标 拿较重硬币与真币进行比较:
如果比真币重,则返回这个硬币下标,并且返回Heavy;否则返回另一个硬币下标,并且返回Light;
#include int flag=0;int sum_coin(int a[],int from,int to){
int i,sum=0;
for(i=from;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;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”);}