-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path打怪
55 lines (46 loc) · 1.68 KB
/
打怪
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
小赛经常沉迷于网络游戏。有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为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)表示每个怪物的防御力
数据保证——
50%的n<=100,
80%的n<=1000,
90%的n<=10000,
100%的n<=100000.
输出
对于每组数据,输出一行。每行仅包含一个整数,表示小赛的最终能力值。
*/
#include<stdio.h>
//求最大公约数(num1>num2)
long long int greatestCommonDivisor(long long int num1, long long int num2) {
long long int remainder; //余数
while((num1 % num2) != 0) {
remainder = num1 % num2;
num1 = num2;
num2 = remainder;
}
return num2;
}
int main(void) {
long long int b; //用于存储每个怪物的防御力
long long int n; //怪物个数
long long int a; //小赛初始能力值
long long int i;
while(scanf("%lld%lld", &n, &a) != EOF) {
for(i = 0; i < n; i++) {
scanf("%lld", &b);
if(a >= b) {
a += b;
} else {
a += greatestCommonDivisor(b, a);
}
}
printf("%lld\n", a);
}
return 0;
}