寻找n8枚硬币中的假币
这个n无法改变,导致函数无法正常运行
#include
int Fendui(int n,int s[]){ //将数组分为3堆
int i,c1,c2,c3;
for(i=0;i<n/3;i++)
c1+=s[i];
for(i=n/3;i<(2*n)/3;i++)
c2+=s[i];
for(i=(2*n)/3;i<n;i++)
c3+=s[i];
if(c1==c2) return (2*n)/3; //判断假币在哪一堆,并返回所在数组的开头的位置
if(c1==c3) return n/3;
if(c2==c3) return 0;
}
int search(int n,int s[]){ //查找硬币在哪一堆
int k,i,j;
while(n!=1){
if(n%3==0){
k=Fendui(n,s);
n=n/3;
}
if(n%3==1)
if(s[n-1]!=s[n-2]&&s[n-1]!=s[n-3]) return s[n-1];
else{
k=Fendui(n-1,s);
n=(n-1)/3;
}
if(n%3==2)
if(s[n-1]==s[n-2]){
k=Fendui(n-2,s);
n=(n-2)/3;
}
else if(s[n-1]!=s[n-3]) return s[n-1];
else return s[n-2];
for(i=k;i<n;i++)
{
s[j]=s[i];
j++;
}
}
}
int main(){
int k;
int s[8]={1,1,1,1,2,1,1,1};
k=search(8,s);
printf("%d",k);
}