数学推导——小赛打怪升级

时间:2020-04-28
本文章向大家介绍数学推导——小赛打怪升级,主要包括数学推导——小赛打怪升级使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

问题

小赛经常沉迷于网络游戏。有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为a。
在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3,…bn。
如果遇到的怪物防御力bi小于等于小赛的当前能力值c,那么他就能轻松打败怪物,并且使得自己的能力值增加bi;
如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi与c的最大公约数。那么问题来了,在一系列的锻炼后,小赛的最终能力值为多少?

解决:分情况讨论

(1)b1<=当前能力值c:c=c+b1

(2)b1>c:求最大公约数:使用辗转相除法。

code

 1 package yrc5;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Main {
 6     public static void main(String args[]) {
 7         Scanner s = new Scanner(System.in);
 8         int n;
 9         double a;
10         while(s.hasNext()) {
11             n = s.nextInt();
12             a = s.nextDouble();
13             for(int i=0;i<n;i++) {
14                 double temp = s.nextDouble();
15                 if(temp<a) {
16                     a+=temp;
17                 }
18                 else {
19                     a+=maxFactor(a,temp);
20                 }
21             }
22         System.out.printf("%.0f\n",a);
23         }
24     }
25     //求两个数的最大公约数(使用辗转相除法)
26     public static double maxFactor(double a,double temp) {
27         double r;
28         do {
29             r = a%temp;
30             a = temp;
31             temp = r;
32         }while(temp!=0);
33         return a;
34     }
35 }

原文地址:https://www.cnblogs.com/dream-flying/p/12794304.html