题目描述
小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.
在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3…bn.
如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;
如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.
那么问题来了,在一系列的锻炼后,小易的最终能力值为多少?
eg:
输入:
3 50
50 105 200
5 20
30 20 15 40 100
输出:
110
205
以下是本篇文章正文内容,下面案例可供参考
解题思路
根据题目条件知,要么小易的能力值加对战怪物的防御值,要么加对战怪物防御值和他自己能力值的公约数
可以先写一个公约数的方法接口
判断当前怪物的防御值,与小易本身的能力值的大小,做出相应能力值的添加,得到最终的数字大小,就是小易的最终能力值
代码如下
import java.util.Scanner;
public class Main {
/**
* 小易的升级之路
*
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int a = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();//获取到对应的能力值
//判断大小
if (a > arr[i]) {
a += arr[i];
} else {
a += getGYS(a, arr[i]);
}
}
System.out.println(a);
}
}
/**
* 求最大公约数
*
* @param a 数字1
* @param b 数字2
* @return 返回最大公约数
*/
public static int getGYS(int a, int b) {
if (b % a == 0) {
return a;
} else {
return getGYS(b % a, a);
}
}
}