“五家共井”问题和“鸡兔同笼”问题一样,都是一个著名的问题。具体的题目如下:现在有五家共用一口井,甲、乙、丙、丁、戊五家各有一条绳子汲水(下面用文字表示每一家的绳子):甲×2+乙=井深,乙×3+丙=井深,丙×4+丁=井深,丁×5+戌=井深,戌×6+甲=井深,求甲、乙、丙、丁、戊各家绳子的长度和井深。
len1X2+len2=len2X3+len3=len3X4+len4=len4X5+len5=len5X6+len1
由此推出
len1=len2+len3/2
len2=len3+len4/3
len3=len4+len5/4
len4=len5+len1/5
由此可以看出以下几点
len3能被2整除
len4能被3整除
len5能被4整除
len1能被5整除
按照这个思路
void FiveFamilyHasWell(int *h,int *len1,int *len2,int *len3,int *len4,int *len5){
int flag;//标志位
flag=1;
while(flag){
(*len5)+=4;
*len1=0; //第一次写的写的时候一句忘记写了,导致死循环 (len5不断的增加,在len5的基础上 len1每次循环都必须初始成0,不然死循环)
while(flag){
(*len1) +=5;
(*len4)=(*len5) + (*len1)/5;
(*len3)=(*len4) + (*len5)/4;
//不能整除 直接下次循环
if((*len3)%2){
continue;
}
//不能整除 直接下次循环
if((*len4)%3){
continue;
}
(*len2)= (*len3) + (*len4)/3;
//不满足 直接外层循环
if((*len2 + *len3/2)< *len1){
break;
}
//找到了标志位置为 0
if((*len2 + (*len3)/2)== (*len1)){
flag=0;
}
}
}
*h= 2*(*len1)+ (*len2);
}
int main(){
int h=0;
int len1=0;
int len2=0;
int len3=0;
int len4=0;
int len5=0;
FiveFamilyHasWell(&h, &len1, &len2, &len3, &len4, &len5);
printf("甲 %d \n乙 %d \n丙 %d \n丁 %d \n戊 %d \n井深 %d\n",len1,len2,len3,len4,len5,h);
return 0
}