猴子运香蕉

题面:

一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。

提示:他可以把香蕉放下往返的走,但是必须保证它每走一米都能有香蕉吃。也可以走到n米时,放下一些香蕉,拿着n根香蕉走回去重新搬50根。


题解:

现在有S香蕉,要运L米。

每次带满香蕉,往前走1米,放下所有香蕉,回头1米,轮流这样怒运,就能花x个香蕉把所有香蕉往前挪1米,香蕉变成S2,问题转化成 有S2香蕉要运(L-1)米。

于是就这样暴力狂运,每次判断一下直接冲到终点能剩下多少个香蕉。


代码:

#include<stdio.h>
#define max(a,b) ( ((a)>(b)) ? (a):(b) )
#define min(a,b) ( ((a)>(b)) ? (b):(a) )

int main() {
    int ans=0, bring, cnt;
    int t,s,l;
    ///t为最大携带数 s为香蕉总数 l为总路程
    printf("请分别输入香蕉总数,离家路程,最大携带量:\n");
    scanf("%d%d%d",&s,&l,&t);

    ans=max(ans,min(s,t)-l);
    while(s>0) {
        cnt=s;
        s=0;
        ///1米往返抽搐运动往前怒运全部香蕉
        while(cnt>0) {
            bring = min(t,cnt);
            s+=bring-1;
            cnt-=bring;
            if(cnt>2)cnt--;
            else break;
        }
        l--;
        printf("还剩%d距离,有%d香蕉,直接冲过去能带%d个\n",l,s,min(t,s)-l);
        ans = max(ans , min(t,s) - l);
        if(s<=t)break;
    }
    if(ans<=0)printf("\n猴子带不回香蕉");
    else printf("\n猴子最多能带回%d个香蕉\n",ans);
    getch();
}




(今天同学找我做这个逗题,居然有这么逗的题,猴子运香蕉!我就贴到这个不用的逗博客好了)

(这题网上搜到的那个代码我都怕得飞起来,C语言居然能写成这样,

for(;++i;)
  if(t<=i*(2*n-1))break;


卧槽,++i写在for的中间位置,这不是写条件的地方吗!然后条件居然放到循环里用if,我都看醉了,简直能排上史上十大最逗for循环之一

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值