美文网首页
现在需要将总数和各自重量都已知的兔子放进 n 个笼子中,将所有兔

现在需要将总数和各自重量都已知的兔子放进 n 个笼子中,将所有兔

作者: 一位先生_ | 来源:发表于2022-08-01 22:30 被阅读0次

题目:
现在需要将总数和各自重量都已知的兔子放进 n 个笼子中,将所有兔子全部放进去后,最终每个笼子的重量需要相同
请实现一个函数,输入 包含了所有兔子重量的数组 和 笼子的数量,输出 最终每个笼子的重量是否能够相同
提示:兔子重量为正整数,且不许杀兔子
数组长度不超过15

测试用例1:
输入:[2, 2, 3, 3, 5], 3
输出:true
解释:5只兔子按以下方式放入3个笼子后,笼子重量相同:[2, 3]、[2, 3]、[5]

测试用例2:
输入:[3, 5, 5, 6, 7], 4
输出:false
解释:5只兔子无论怎样分配到4个笼子中,笼子重量都无法相同

思路一
利用队列的方式;从大到小相加数据;循环判断。PYTHON版本

def func(arr,n):
    if n == 1: return True
    if n > 14  or sum(arr) % n != 0: return False
    avg = sum(arr) // n
    if  max(arr) > avg:return False
    arr = sorted(arr)[::-1]
    for i in range(n):
        s = 0
        test_arr = []
        flag = True
        while flag:
            for k,v in enumerate(arr):
                if (s + v) <= avg :
                    s += arr.pop(k)
                    test_arr.append(v)
                    if s == avg:flag = False
                    break
            if flag and s + arr[-1] > avg :return False
        print(test_arr)
        if i == n - 1 :return True
    return False

PHP版本

<?php
function weight($a,$count){
    if(count($a) > 15 || count($a) < 1 || count($a) < $count || $count < 1){//边界
        return false;
    }
    if($count < 2){
        return true;//一个笼子直接true
    }
    $total = array_sum($a);//求和
    if( $total%$count != 0 ){//总重量除不尽笼子数量
        return false;
    }
    $avg = $total/$count;
    //var_dump($avg);die;
    rsort($a);//数组取降序 从大数字加小数字
    //var_dump($a);die;
    $tmp = 0;
    for( $i=0; $i<=$count-1; $i++ ){
        $flag = true;
        $tmp = 0;
        $tmp_arr = [];
        while ($flag){
            $a = array_values($a);
            foreach ($a as $key=>$value){
                if($tmp + $value <= $avg){
                    $tmp += $value;
                    unset($a[$key]);//去除加的这个数
                    array_push($tmp_arr,$value);
                    if($avg == $tmp){
                        $flag = false;
                        break;
                    }
                }
            }
            if($flag && $tmp + $a[$key] > $avg){ //临时加最后一个
                return false;
            }
        }
        print_r($tmp_arr);
    }
    return true;
}
$re =  weight([1,2,6,7,7,9], 2);
var_dump($re);

思路二
创建一个 list; 循环所有兔子搭配的可能;放入list;然后 求和;算出结果;出现次数最多的那个结果;且这个结果 不大于 总的兔子重量除以笼子数; 如果该求和的所有种结果中少于 笼子的数量;说明无法均匀分配到每一个笼子中。

from itertools import combinations

def combine(temp_list, n):
    '''根据n获得列表中的所有可能组合(n个元素为一组)'''
    temp_list2 = []
    for c in combinations(temp_list, n):
        temp_list2.append(c)
    return temp_list2

def rabbit_arr(list1,jieguo):
    cage_list =[]
    end_list = []
    for i in range(len(list1)):
        if combine(list1, i) != [()]:
            end_list.extend(combine(list1, i))

    for i in set(end_list):
        if sum(i)<=jieguo:  # 不可能大于 这个数字 否则就肯定会分不均
            cage_list.append(sum(i))
    # print(cage_list)
    na = max(cage_list, key=cage_list.count)
    inum = cage_list.count(na)
    dictns = {}
    for i in cage_list:
        if cage_list.count(i) == inum:
            dictns[i] = inum
    res =[]
    for k in dictns.keys():
        res.append(k)
    return res

相关文章

  • 现在需要将总数和各自重量都已知的兔子放进 n 个笼子中,将所有兔

    题目:现在需要将总数和各自重量都已知的兔子放进 n 个笼子中,将所有兔子全部放进去后,最终每个笼子的重量需要相同请...

  • 鸡兔同笼,三整数排序

    例题1-4:鸡兔同笼 已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如果无解,则输出...

  • 0003-鸡兔同笼

    问题描述 一个笼子里面关了鸡和兔子(鸡有 2 只脚,兔子有 4 只脚,没有例外)。已经知道了笼子里面脚的总数 a,...

  • 兔子、孩子、妈妈

    多多抱起兔子要将它放进笼子里,他没有抱稳,兔子一挣扎啪哒掉在了地上。我看见兔子掉下的地方有血,赶紧跑过去查看多多的...

  • 0-1 背包问题详解

    给定一组有固定价值和固定重量的物品,以及一个已知最大承重量的背包,求在不超过背包最大承重量的前提下,能放进背包里面...

  • 破风,态度决定一切

    @龟兔第二次赛跑,兔子还是输了,为什么? 兔子没有去跑,因为龟和兔子各自有各自的任务和使命,不需要在同一个方向竞争...

  • 母亲的爱好2

    母亲养兔子,有白兔,黑兔 ,灰兔,有十几只,购来了几个兔笼子,每个笼子里四只,天天要出去割青草,野菜来喂养它们,一...

  • 背包问题

    假设有n件物品,每件物品都有各自的重量和价值,现在给一个最多可以装v重量的背包,请问如何装才能使价值最大。 用动态...

  • 那只狂躁的兔子

    去年夏天,去一 个养兔场参观学习,宽敞明亮的兔棚里,一排排的笼子,接近成年的兔子享受单间待遇,每个笼子的...

  • CodeFoeces-939B

    题目 原题链接:B. Hamster Farm 题意 有n只仓鼠要放进笼子。有k种笼子。要求每个笼子必须放满,问选...

网友评论

      本文标题:现在需要将总数和各自重量都已知的兔子放进 n 个笼子中,将所有兔

      本文链接:https://www.haomeiwen.com/subject/yjlwtrtx.html