【题目】有只猴子在树林采了100根香蕉堆成一堆,猴子家离香蕉堆50米,猴子打算把香蕉背回家,每次最多能背50根,可是猴子嘴馋,每走一米要吃一根香蕉,问猴子最多能背回家几根香蕉。

  • 文件名:[作业]
  • 作者:〈漆黑〉
  • 描述:〈 猴子来了
  • 有只猴子在树林采了100根香蕉堆成一堆,猴子家离香蕉堆50米,猴子打算把香蕉背回家,每次最多能背50根,可是猴子嘴馋,每走一米要吃一根香蕉,问猴子最多能背回家几根香蕉。
  • 如果只能算整根的话,猴子最后可以搬回家16根,中间路上不得已扔掉两根,或者全部吃完。
  • 猴子走到16米的时候,还剩34根,放下18根香蕉,拿着16根往回走,走到香蕉堆正好吃完,再拿上那50根香蕉往家走,走到16米的时候,那里放着18根香蕉,用那18根补充满手里的,再往家走,走到家,剩16根,16米处扔掉两根
  • 猴子走到17米的时候,还剩33根,放下16根香蕉,拿着17根往回走,走到香蕉堆正好吃完,再拿上那50根香蕉往家走,走到17米的时候,那里放着16根香蕉,用那16根补充手里的,手里有49根,距离家还有33米,再往家走,走到家,剩16根 〉
  • 创建时间:2019.7.24
  • 已完善
/****************************
* 文件名:[题目]
* 作者:〈漆黑〉
* 描述:〈	猴子	〉
* 创建时间:2019.1.5
****************************/
import java.util.Scanner;

public class Test {
	public static void main(String[] args){
		System.out.println( "猴子100个香蕉,距离家50米,一次最多搬50根,搬到家最多" + monkey(100, 50, 50) + "根。");
	}
	
	static int monkey(int sum, int dis, int carry){//sum个香蕉,距离dis米,一次最多搬carry个香蕉,均大于0整数,当它有超过50个时,搬50个走一米把剩下的放下再回头搬其它的过来,每走一米要吃到3个香蕉
		if(carry < 2) return 0;//一次搬一个只能搬0个
		if(carry == 2){//一次搬两个
			if(dis > 1) return 0;//距离>=2米,只能搬0个
			if(sum < 2) return 0;//香蕉只有一个,只能搬0个
			return 1;//否则可以搬1个到家
		}
		if(sum <= dis) return 0;//香蕉数量 < 距离
		if(carry > sum) return sum - dis;//一次能全搬完
		while(dis > 0){
			if(sum % carry <= 2) sum = sum - (sum % carry);//如果最后剩下1到2个香蕉,则舍去
			sum -= (2 * ((sum - 1) / carry) + 1);//如果承重为carry,剩余香蕉为sum,当sum > carry时,把香蕉搬1米要消耗 2*((sum-1)/carry) + 1)
			dis--;
		}
		return sum;
	}
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值