每天一题(6)-小赛的升级之路

﹏ヽ暗。殇╰゛Y 2021-11-16 22:18 270阅读 0赞

每天一题-小赛的升级之路

  • 题目
  • 代码

题目

在这里插入图片描述

代码

  1. import java.util.Scanner;
  2. /**
  3. * 题目描述:https://exercise.acmcoder.com/online/online_judge_ques?ques_id=719&konwledgeId=134
  4. *
  5. * 小赛经常沉迷于网络游戏。有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为a。在接下来的一段时间内,
  6. * 他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3,…bn。如果遇到的怪物防御力bi小于等于小赛的当前能力值c,
  7. * 那么他就能轻松打败怪物,并且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,
  8. * 但他的能力值只能增加bi与c的最大公约数。那么问题来了,在一系列的锻炼后,小赛的最终能力值为多少?
  9. *
  10. *
  11. * 输入
  12. * 对于每组数据,第一行是两个整数n(1<=n<=100000)表示怪物的数量和a表示小赛的初始能力值,第二行n个整数,b1,b2..bn.(1<=bi<=n)表示每个怪物的防御力
  13. * 数据保证——
  14. * 50%的n<=100,
  15. * 80%的n<=1000,
  16. * 90%的n<=10000,
  17. * 100%的n<=100000.
  18. *
  19. *
  20. * 样例输入
  21. * 3 50
  22. * 50 105 200
  23. * 5 20
  24. * 30 20 15 40 100
  25. *
  26. * 输出
  27. * 对于每组数据,输出一行。每行仅包含一个整数,表示小赛的最终能力值。
  28. *
  29. * 样例输出
  30. * 110
  31. * 205
  32. *
  33. * @author ydfind
  34. * @date 2019.07.26
  35. */
  36. public class Main {
  37. private static long calc(int n, int a, int[] bn){
  38. long c = a;
  39. for(int i = 0; i < n; i++){
  40. int bi = bn[i];
  41. if(bi <= c){
  42. c += bi;
  43. }else{
  44. c += maxDivisor(bi, (int)c);// bi > c, 故c必然在int范围内
  45. }
  46. }
  47. return c;
  48. }
  49. /**
  50. * 其中a > b
  51. * @param a
  52. * @param b
  53. * @return
  54. */
  55. public static int maxDivisor(int a, int b){
  56. int n = a;
  57. int m = b;
  58. int r = 0;
  59. while(m > 0){
  60. r = n % m;
  61. n = m;
  62. m = r;
  63. }
  64. return n;
  65. }
  66. public static void main(String[] args) throws Exception {
  67. Scanner cin = new Scanner(System.in);
  68. while(cin.hasNextInt()) {
  69. int n = cin.nextInt();
  70. int a = cin.nextInt();
  71. int[] bn = new int[n];
  72. for(int i = 0; i < n; i++){
  73. bn[i] = cin.nextInt();
  74. }
  75. // 返回值需要用long,否则部分数据无法通过
  76. long count = calc(n, a, bn);
  77. System.out.println(count);
  78. }
  79. }
  80. }

关键:求两个int的公约数

发表评论

表情:
评论列表 (有 0 条评论,270人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Python每天 0000

    开学了,也继续写博客了,暑假期间也写了很多笔记。有空再复习下写在博客上。 很喜欢这个每天一题的~~~ 如有错误,请大牛指出,谢谢。 第一天是对图片的操作,那么就安装