小红杀怪(java)

思路:

枚举 二技能的使用次数

然后根据二技能的使用次数得出两只怪兽的剩余血量 

然后再除以1 技能的伤害 (向上取整)

因为你的剩余血量只有小于等于0 才算击败野怪

我按照这个思路写,结果发现向上取整函数好像没有使用正确

每次的sum 好像都没有向上取整

错误代码

package Lanqiao1;

import java.util.Scanner;

public class 小红杀怪 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner in = new Scanner(System.in);
//		两只怪兽的血量
		
		int a = in.nextInt();
		int b= in.nextInt();
//		两个技能的伤害
		int x = in.nextInt();
		int y =in.nextInt();
//		假设 使用二技能  k次
//		那么剩余的使用 一技能的次数就是 
		int sum =0; 
		int min =Integer.MAX_VALUE;
		for(int k = 0; k<=20; k++) {
			sum = k;
//			使用1技能的剩余次数等于 
//			怪兽a 剩余血量 除以  一技能的伤害,向上取整
			sum += Math.ceil( (a - k * y)/x );
//			System.out.print("sum1:"+sum);
//				怪兽b 剩余血量 除以  一技能的伤害,向上取整
			sum += Math.ceil( (b - k * y)/x );
//			System.out.print("sum2:"+sum);
//			求使用技能次数的最小值
			System.out.println(sum);
		min =Math.min(min, sum);
		}
		System.out.println(min);
		
		in.close();
	}

}

原因在于我括号的内部是整数的除法

,整数的出发是向下取整 ,

应该先转换成double 类型 才能实现向上取整 再转化为int

这是修改的地方

//			使用1技能的剩余次数等于 
//			怪兽a 剩余血量 除以  一技能的伤害,向上取整
			sum += Math.ceil( (	(double)a - k * y)/x );
//			(double)
//			System.out.print("sum1:"+sum);
//				怪兽b 剩余血量 除以  一技能的伤害,向上取整
			sum += Math.ceil( (	(double)b - k * y)/x );

修改之后的运行结果

emm还是不对

视频上说向上取整是这样

ok,继续改

我发现自己忽略了一个点 就是如果 怪兽血量都是负数了,还加到次数里面有问题

所以需要新增一个判断剩余血量的 如果剩余血量>0 才能使用1 技能 



import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner in = new Scanner(System.in);
//		两只怪兽的血量
		
		int a = in.nextInt();
		int b= in.nextInt();
//		两个技能的伤害
		int x = in.nextInt();
		int y =in.nextInt();
//		假设 使用二技能  k次
//		那么剩余的使用 一技能的次数就是 
		int sum =0; 
		int min =20;
		for(int k = 0; k<=20; k++) {
			sum = k;
//			使用1技能的剩余次数等于 
//			怪兽a 剩余血量 除以  一技能的伤害,向上取整
			if(a-k*y>0)
			sum += Math.ceil( (a - k * y+x-1)/x );
//			(double)
//			System.out.print("sum1:"+sum);
//				怪兽b 剩余血量 除以  一技能的伤害,向上取整
//			避免负数的影响 
			if(b-k*y>0)
			sum += Math.ceil( (b - k * y+x-1)/x );
//			double)
//			System.out.print("sum2:"+sum);
//			求使用技能次数的最小值
//			System.out.println(sum);
		min =Math.min(min, sum);
		}
		System.out.println(min);
		
		in.close();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值