题目大意:
给你几组数,每组数占输入的一行,但具体几个数没给你,让你算每组数中两两数的最大公约数最大是多少。
解题思路:
本来是是打算弄个素数筛,如果两数中有一个数是素数,就不算他俩的最大公约数了,伪暴力枚举两两数的最大公约数比较下。然后突然发现数据范围超级小啊,就直接暴力过了。。。注意下这题还是有几个坑的,首先是得按行读入,再把每行里的数分离出来,这样的话,读第一个数(就是那个测试用例数目)的时候,末尾换行符要处理一下。这里求公约数用的是欧几里得算法。
通过代码: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
using namespace std;
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
int n, m;
int arr[150];
string line;
int main(void)
{
scanf("%d ", &n);
while (n--)
{
getline(cin, line);
stringstream ss(line);
int ans = 1;
for (m = 0; ss >> arr[m + 1]; ++m)
for (int j = 1; j <= m; ++j)
ans = max(ans, gcd(arr[j], arr[m + 1]));
cout << ans << endl;
}
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GuKaifeng's Blog!
评论(延迟加载 / 需要可访问 GitHub Issues)