24小时热门版块排行榜    

查看: 593  |  回复: 2

haixiawu

金虫 (文坛精英)

[交流] 分鱼的问题的另一解法 已有2人参与

分鱼的问题
A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿走鱼。问他们合伙至少捕了多少条鱼?
------------------------------------

假定捕了n条鱼,那么A,B,C,D,E拿的鱼分别为:
A      (n-1)/5
B        (4*(n-1)/5-1)/5 = (4n - 4 - 5)/25
C    (4*(4n-4-5)/25 - 1)/5 = (4^2 n - 4^2 - 4*5 - 5^2)/5^3
D      (4^3 n - 4^3 - 4^2 * 5 - 4 * 5^2 - 5^3)/5^4
E      (4^4 n - 4^4 - 4^3 * 5 - 4^2 * 5^2 - 4 * 5^3 - 5^4)/5^5
假定E拿了x条鱼,那么有
5^5 x + (4^4 + 4^3 * 5 + 4^2 * 5^2 + 4 * 5^3 + 5^4) = 4^4 n
令a=5^5, b=(4^4 + 4^3 * 5 + 4^2 * 5^2 + 4 * 5^3 + 5^4), c=4^4
据此得以下代码
    rounds = 5
    B = 0
    for i in range(rounds):
        B += pow(4, rounds - 1 -i) * pow(5, i)

    C = pow(4, rounds-1)
    A = pow(5, rounds)
    x = 1
    while True:
        if (A*x + B )% C == 0:
            break
        else:
            x += 1
    print (A * x + B) / C
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)


小木虫: 金币+0.5, 给个红包,谢谢回帖
来个1stOpt解法:
CODE:
IntParameter n=[6,100000];
MinFunction n;
         (n-1) mod 5 = 0;
         (((n-1) div 5)*4-1) mod 5 =0;
         ((((n-1) div 5)*4 div 5)*4-1) mod 5 =0;
         (((((n-1) div 5)*4 div 5)*3 div 5)*4-1) mod 5 =0;
         ((((((n-1) div 5)*4 div 5)*3 div 5)*2 div 5)*4-1) mod 5 =0;

n: 3121
2楼2013-03-05 10:14:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
怎么看楼主代码写的有股basic的感觉,哈哈
3楼2013-03-14 07:20:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 haixiawu 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见