原题算法思路(1)一共有6桶酒,5桶白酒,1桶红酒。由于上午卖出了2桶白酒,下午卖出的白酒是上午的两倍,具体桶数不详,故假设为n桶,n可以是1-3。但是从30和32最小的2桶加起来是62升来看,2倍是124升,所以n只能是3,也就是说下午实际卖出了3桶白酒。5桶白酒中,3桶白酒的总和是另外2桶白酒总和的2倍,那么这5桶白酒的总和可以被3整除,我们可以得到这样一个逻辑:减去6桶白酒的总和其中,1桶酒(假设是红酒),剩下的5桶是白酒,减去后能被3整除,那么减去的桶酒就是红酒。(这5个数的和可以被3整除,不懂的可以点这里看)代码示例(1)//计算哪一桶是红酒publicfunctionalcohol(){//6桶葡萄酒的升数数组$arr=array(30,32,36,38,40,62);$len=count($arr);//对6桶葡萄酒的升数求和$sum=array_sum($arr);//用6桶酒的总和减去其中一桶酒(假设是红酒),则剩下的5桶是白酒,减去后能被3整除,则减去的桶数wine是红酒for($n=0;$n<$len;$n++){$red=$sum-$arr[$n];if($red%3==0){print_r('当前总和:'.$arr[$n].'是红酒');}}}输出结果(1)当前升:40是红酒的算法思路(2)由于共有六桶酒,其中白酒五桶,红酒一桶;也就是说,下午卖出的N桶白酒的升数是上午卖出的两桶白酒的2倍。由于没有说明下午卖出了多少桶,所以N是不确定的,即N的范围是1-3;但是,从这六桶酒中,我们可以知道升数最小的是30升和32升,这两个数字相加是62升,那么下午至少要卖出124升,也就是,N个桶的升数不能小于124,再看其他桶的升数,所以N只能是3;即最后得知上午卖两桶白酒,下午卖三桶白酒,上午两桶白酒的升数的两倍等于上午卖三桶的升数afternoon白酒的升数,然后剩下的桶是红酒。代码示例(2)//六桶酒的升数数组$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;//去掉早间卖两桶酒unset($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'上午卖的白酒是:'。$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)。'
';}}}}}}输出结果(2)上午卖的酒是:30、36
下午卖的酒是:32、38、62
五桶酒都是:30、36,32,38,62
br>一桶红酒是:40
总结分析我只列出了其中的两种实现方式,当然还有其他的实现方式,欢迎留言评论领域,写算法思路+代码实例,语言不限数据算法题计算哪一桶是红酒