本文主要是介绍五家共井问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
“五家共井”问题和“鸡兔同笼”问题一样,都是一个著名的问题。具体的题目如下:现在有五家共用一口井,甲、乙、丙、丁、戊五家各有一条绳子汲水(下面用文字表示每一家的绳子):甲×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;}//找到了标志位置为 0if((*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
}
这篇关于五家共井问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!