feed the pigeons

I start to feed one of the pigeons. A minute later two more fly by and a minute after that another 3. Then 4, and so on (Ex: 1+2+3+4+...). One portion of food lasts a pigeon for a minute, but in case there's not enough food for all the birds, the pigeons who arrived first ate first. Pigeons are hungry animals and eat without knowing when to stop. If I have N portions of bird feed, how many pigeons will be fed with at least one portion of wheat?

pigeons

Input: A quantity of portions wheat as a positive integer.

Output: The number of fed pigeons as an integer.

Example:

?
1
2
3
4
checkio(1) == 1
checkio(2) == 1
checkio(5) == 3
checkio(10) == 6
How it is used: This task illustrates how we can model various situations. Of course, the model has a limited approximation, but often-times we don't need a perfect model.

Precondition: 0 < N < 105.


下面有2中方法,one is ugly while another is elegant

ugly

g_n = 0
def checkio(N):
    global  g_n
    g_n = N
    pd = dict()
    pd[1] = 1
    g_n -= 1
    i = 1
    while 1:
        i += 1
        r = eat(pd,i)
        if r != -1:
            return r
def eat(pd,x):
    global  g_n
    for m in pd:
        g_n -= pd[m]
        if g_n <= 0:
           return cal(pd)
    i = 1
    while i<=x:
        g_n -= 1
        if g_n == 0:
            pd[x] = i
            return cal(pd)
        i += 1
    if i >= x:
        pd[x] = x
    return -1

elegant:

def checkio1(food):
    #init Minute that is also how many pigeons will show up next minute and total pigeons.
    m = t = 0
    while 1:
        m += 1
        food -= t
        if food > 0:
            temp = min(food,m)
            t += temp
            food -= temp
        else:
            return  t

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值