洛谷 B3941 [GESP样题 五级] 小杨的锻炼
·
题目描述
小杨的班级里共有 nnn 名同学,每位同学都有各自的锻炼习惯。具体来说,第 iii 位同学每隔 aia_iai 天就会进行一次锻炼(也就是说,每次锻炼会在上一次锻炼的 aia_iai 天后进行)。某一天,班上的 nnn 名同学恰好都来进行了锻炼。他们对此兴奋不已,想要计算出下一次所有同学都来锻炼,至少要过多少天。但他们不会计算,你能帮帮他们吗?
输入格式
第一行一个整数 nnn,表示同学的数量。
第二行 nnn 个用空格隔开的正整数,依次为 a0,a1,…,an−1a_0, a_1, …, a_{n-1}a0,a1,…,an−1。
输出格式
输出一个整数,表示下一次所有同学都来锻炼,至少要过多少天。
输入输出样例 #1
输入 #1
3
1 2 3
输出 #1
6
输入输出样例 #2
输入 #2
4
2 4 8 16
输出 #2
16
输入输出样例 #3
输入 #3
4
2 4 6 8
输出 #3
24
说明/提示
样例 1 解释
第一位同学每天都锻炼;第二位同学每 222 天锻炼一次;第三位同学每 333 天锻炼一次。因此,666 天之后,三位同学都会进行锻炼。在此之前,第二位同学只会在第 2,42, 42,4 天进行锻炼,第三位同学只会在第 333 天进行锻炼,他们都无法相遇。
样例 2 解释
第四位同学每 161616 天锻炼一次,而 161616 天后也恰好是前三位同学锻炼的日子。
数据规模与约定
- 对 20%20\%20% 的数据,n=2n = 2n=2。
- 对 50%50\%50% 的数据,n=4n = 4n=4。
- 对 100%100\%100% 的数据,2≤n≤102 \leq n \leq 102≤n≤10,1≤ai≤501 \leq a_i \leq 501≤ai≤50。
solution
求最小公倍数就可以了
代码
#include "iostream"
#include "cstddef"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "queue"
#include "stack"
#include "algorithm"
#include "sstream"
#include "format"
#include "cstdio"
#include "cstring"
#include "random"
#include "ctime"
#include "cstdlib"
#include "algorithm"
using namespace std;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
int lcm(int a, int b){
return a / gcd(a, b) * b;
}
int main() {
int n, x, y;
cin >> n;
cin >> x;
while (--n){
cin >> y;
x = lcm(x, y);
}
cout << x;
}
结果

更多推荐

所有评论(0)