C语言:老和尚让小和尚将A桶的水挑到B桶去....求A桶水中一共有几升水的问题。

代码如下:

/*********************************************************************************
*功能:解决和尚挑水问题,问题在下方
*作者:lml   时间:2020年4月14日 13:22
*问题:有一天,老和尚让小和尚将A桶的水挑到B桶去,可是小和尚却想下山玩,不愿意挑水,
*老和尚便说:"如果你能够根据我的提示算出A桶中有多少升水,我便许你下山去玩。"
*小和尚欣然接受。老和尚说道:"在你面前有五个小水桶,它们分别可以装1、2、3、4、5
*升水。如果你每次用其中两个桶去挑水,那么恰好可以挑6次;如果你用三个桶去挑水,
*那么恰好可以挑4次;如果你用四个桶去挑水,那么恰好可以挑2次。"那么,A桶中一共有
*多少升水?
********************************************************************************/

#include <stdio.h>

int main(int argc, const char *argv[])
{
    
    
	int t[5]={
    
    1,2,3,4,5};//定义五个桶

	//挑选四个桶,排列一下
	int ft1[4]={
    
    1,2,3,4};
	int ft2[4]={
    
    1,2,3,5};
	int ft3[4]={
    
    1,2,4,5};
	int ft4[4]={
    
    1,3,4,5};
	int ft5[4]={
    
    2,3,4,5};
	int ftt[5]={
    
    0};      //每种排列的和存在这里
	int i=0,j=0,k=0,n=0;
	int val[5]={
    
    0},sig=0;
	
	//四个桶的升数相加
	for(i=0;i<4;i++){
    
    
		ftt[0] = ftt[0]+ft1[i];
		ftt[1] = ftt[1]+ft2[i];
		ftt[2] = ftt[2]+ft3[i];
		ftt[3] = ftt[3]+ft4[i];
		ftt[4] = ftt[4]+ft5[i];
	}
	//判断用两个桶挑6次与四个桶挑2次作比较
	//得到的值可能有多种情况,每种情况放在val数组里
	for(i=0;i<5;i++){
    
    
		for(j=0;j<5;j++){
    
    
			for(k=0;k<5;k++){
    
    
				if(i!=j){
    
    
					if((t[i]+t[j]) * 6 == 2*ftt[k]){
    
    
						printf("1->i:%d  j:%d  k:%d\n",i,j,k);
						val[sig] = 2*ftt[k];
						sig++;
					}
				}
			}
		}
	}
	//用上面筛选满足的情况和三个桶挑四次的情况比较,满足的就是结果
	for(i=0;i<5;i++){
    
    
		for(j=i+1;j<5;j++){
    
    
			for(k=j+1;k<5;k++){
    
    
				for(n=0;n<=sig;n++){
    
    
					if((t[i]+t[j]+t[k])*4 == val[n]){
    
    
						//printf("2->i:%d  j:%d  k:%d\n",i,j,k);
						printf("result:%d\n",val[n]);
					}
				}
			}
		}
	}
	return 0;
}

运行结果是24升。
结束。

猜你喜欢

转载自blog.csdn.net/qq_19693355/article/details/105612412