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升。
结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值