11827 - Maximum GCD
Time limit: 1.000 seconds
Given the N integers, you have to find the maximum GCD(greatest common divisor) of every possible pair of these integers.
Input
The first line of input is an integer N(1<N<100) that determines the number of test cases.
The following N lines are the N test cases. Each test case contains M (1<M<100) positive integers that you have to find the maximum of GCD.
Output
For each test case show the maximum GCD of every possible pair.
Sample Input | Output for Sample Input |
3 10 20 30 40 7 5 12 125 15 25 | 20 1 25 |
题意:给你一个T,表示有T行,每行不确定有几个数字,求出其中两个数的最大公约数。
解题思路:我们首先需要处理一下字符串,在写一个gcd的调用函数,两层for循环,暴力枚举。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
char str[200];
int num[1000];
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
int main()
{
int t;
scanf("%d",&t);
getchar();
while(t--)
{
gets(str);
int term=0,k=0;
for(int i=0; str[i]!='\0'; i++)
if(str[i]==' ')
num[k++]=term,term=0;
else
term=term*10+str[i]-'0';
if(term)
num[k++]=term;
sort(num,num+k);
int max1=0;
for(int i=k-1; i>=0&&num[i]>max1; i--)
{
for(int j=i-1; j>=0&&num[j]>max1; j--)
{
int term=gcd(num[i],num[j]);
if(term>max1)
max1=term;
}
}
printf("%d\n",max1);
}
return 0;
}