算法入门(3)枚举法

描述

农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,…,xN (0 <= xi <= 1,000,000,000).

但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢?

输入
N 一个列表 存着 隔间编号 N长度大于等于2小于100000
C 牛的头数 大于等于2小于N
输出
3

def farmer_cattle(N,C):
    N.sort()
    print(N)
    distance = int(N[-1]/C)+1

    num = 1
    for x in range(distance,0,-1):
        distance = x
        location = N[0]
        for j in range(1,len(N)):
            if (N[j]- (location+distance))>=0:
                location = N[j]
                num+=1
                if num == C:
                    print("牛放完了,最大最近距离{}".format(distance))

                    return True
    return False

if __name__ == "__main__":
    cattle_list = [1,2,8,4,9]
    c= 3
    if len(cattle_list)<=100000 and len(cattle_list)>=2 and c>=2 and c<=len(cattle_list):
    	print(farmer_cattle(cattle_list,c))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值