【牛客网】【网易2016研发工程师编程题】【辗转相除法求最大公约数】
2016-02-25 20:39
513 查看
小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3...bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少? 输入描述: 对于每组数据,第一行是两个整数n(1≤n<100000)表示怪物的数量和a表示小易的初始能力值. 第二行n个整数,b1,b2...bn(1≤bi≤n)表示每个怪物的防御力 输出描述: 对于每组数据,输出一行.每行仅包含一个整数,表示小易的最终能力值 输入例子: 3 50 50 105 200 5 20 30 20 15 40 100 输出例子: 110 205
代码:
import java.util.Scanner; /* * by qr * 2016/2/25 */ public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str = ""; while (scan.hasNext()) { // 用hasnext判断是否结束输入 str = scan.nextLine(); int n = Integer.parseInt(str.split(" ")[0]); int a = Integer.parseInt(str.split(" ")[1]); str = scan.nextLine(); String b_arr[] = str.split(" "); int c = a; for (int i = 0; i < n; i++) { int temp = Integer.parseInt(b_arr[i]); if (temp <= c) { c += temp; } else { c += gongyueshu(c, temp); } } System.out.println(c); } } private static int gongyueshu(int num1, int num2) { // 最大公约数:辗转相除法 if (num1 == num2) return num1; int copy_num1 = num1; int copy_num2 = num2; num1 = Math.max(copy_num1, copy_num2); num2 = Math.min(copy_num1, copy_num2); //可以更简单的代码 int yushu = num1 % num2; while (yushu != 0) { num1 = num2; num2 = yushu; yushu = num1 % num2; } return num2; } }
复杂的:
private static int gongyueshu(int num1, int num2) { // 最大公约数:辗转相除法 if (num1 == num2) return num1; int copy_num1 = num1; int copy_num2 = num2; num1 = Math.max(copy_num1, copy_num2); num2 = Math.min(copy_num1, copy_num2); int result = 0; while (true) { int yushu = num1 % num2; if (yushu == 0) { result = num2; break; } else { num1 = Math.max(num2, yushu); num2 = Math.min(num2, yushu); } } return result; }没有通过不知道为什么,不知道是代码的原因还是系统后台的原因。
相关文章推荐
- c语言字符串 数字转换函数大全
- java中Collection/Collections;List/Set/Map;ArrayList/Vector/LinkedList;HashSet/HashMap/TreeSet/TreeMap
- 00-c#与设计模式目录
- spring学习小结4——bean 的作用域 和引入外部属性文件
- Java中级开发工程师知识点归纳
- spring学习小结——bean之间的关系 继承 依赖
- 快速排序-java
- QT 按键
- ContentProvider 一个应用程序访问另一个应用程序
- 20160210.CCPP体系详解(0020天)
- Maven简明教程(3)---在eclipse中创建工程与基本命令介绍
- LightOJ 1259 Goldbach`s Conjecture(数论)
- eclipse 常用插件
- Java 中带包的类的编译与执行
- PHP内核探索之变量(2)-理解引用
- C语言运算优先级
- C++STL中的标准模板——优先队列
- 俄罗斯方块C++源码
- springmvc和struts2的区别:
- 用java代码实现二叉树的遍历算法