题目链接:
UVA 11827 Maximum GCD
题意:
给出T,代表测试样例,每行是一个样例,会有M个数,求出M个数两两gcd的最大值。M<100.
分析:
唯一麻烦的就是M是未知的,也就是不知道这一行究竟有多少个数.用getline + string读入,然后在转化成数字即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <climits>
#include <cmath>
#include <ctime>
#include <cassert>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
using namespace std;
typedef long long ll;
const int MAX_N = 110;
int T, n;
int data[MAX_N];
string s;
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
int main()
{
cin >> T;
getchar();
while(T--){
getline(cin, s);
n = 0;
int len = s.size();
for(int i = 0; i < len; i++){
if(isdigit(s[i])){
string tmp;
while(i < len && isdigit(s[i])){
tmp += s[i++];
}
int t = 0;
for(int j = 0; j < tmp.size(); j++){
t = t * 10 + tmp[j] - '0';
}
data[n++] = t;
}
}
int ans = 1;
for(int i = 0; i < n; i++){
for(int j = i + 1; j < n; j++){
ans = max(ans, gcd(data[i], data[j]));
}
}
cout << ans << endl;
}
return 0;
}