当前位置: 首页 > 后端技术 > PHP

算法题:计算哪一桶是红酒

时间:2023-03-29 22:43:15 PHP

算法原题莫斯科某酒商有六桶酒,容量分别为30升、32升、36升、38升、40升、62升。五桶白酒和一桶红酒。他家的酒是整桶卖的,早上卖两桶白酒,下午卖两倍的白酒。请问:红酒是哪一桶?算法思路由于一共有六桶酒,其中白酒五桶,红酒一桶;也就是说,下午卖出的N桶白酒升数是上午卖出的两桶白酒升数的两倍。下午卖出了多少桶,所以N不确定,即N的范围是1-3;但是,从这六桶酒中,我们可以知道升数最小的是30升和32升,这两个数的和如果是62升,那么下午至少卖124升,也就是,N桶的升数不能小于124,再看其他桶的升数,所以N只能是3;下午卖三桶白酒,上午两桶白酒的升数的两倍等于下午卖的三桶白酒的升数,然后剩下的一桶是红酒。算法源码//六桶酒的升数数组$arr=[30,32,36,38,40,62];$len=count($arr);//随机选择两桶作为白酒for($i=0;$i<$len-1;$i++){for($j=1+$i;$j<$len;$j++){$twoArr=$arr;//取出早上卖的两个桶Liquorunset($twoArr[$i]);取消设置($twoArr[$j]);$twoArr=array_values($twoArr);//从剩下的桶中取出三桶并假设它是酒for($n=0;$n<$len-4;$n++){for($m=1+$n;$m<$len-3;$m++){for($p=1+$m;$p<$len-2;$p++){//早上的酒量$oneSum=$arr[$i]+$arr[$j];//下午的酒量$twoSum=$twoArr[$n]+$twoArr[$m]+$twoArr[$p];//如果上午卖的白酒升数的两倍等于下午卖的白酒升数,则满足要求if($oneSum*2==$twoSum){echo'sellinthemorningTheliquorsold是:'。$arr[$i]。','。$arr[$j]。'
';echo'下午卖的酒是:'.$twoArr[$n]。','。$twoArr[$m]。','。$twoArr[$p]。'
';echo'五桶酒均为:'.$arr[$i]。','。$arr[$j]。','。$twoArr[$n]。','。$twoArr[$m]。','。$twoArr[$p]。'
';$tmpArr=$twoArr;//取出下午卖的三桶白酒unset($tmpArr[$n]);取消设置($tmpArr[$m]);取消设置($tmpArr[$p]);//剩余的桶是请求的红酒echo'Abarrelofredwineis:'.当前($tmpArr)。'


';}}}}}}最后,这只是我的一个想法和实现方式。算法不是很好。还有许多其他的实现算法。欢迎大家评论留言。实现语言和方法不限,谢谢