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


    问题

    小赛经常沉迷于网络游戏。有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为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
    ",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 }
  • 相关阅读:
    关于数组添加元素的优化 __原文司徒正美
    FIRST
    二维数组作为参数传递问题
    c++线程池的实现
    阻塞和非阻塞
    N皇后解决方法
    判断一棵二叉树是否为BST,一棵树是否为完全二叉树
    c++11可变参数的使用
    最大似然估计和最大后验估计
    利用Microsoft Azure Machine Learning Studio创建机器学习实例
  • 原文地址:https://www.cnblogs.com/dream-flying/p/12794304.html
Copyright © 2020-2023  润新知