Problem J
Maximum GCD
Input: Standard Input
Output: Standard Output
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 |
题意:求出每组数中每两个数最大的最大公约数。
思路:读入可能有多余空格……被坑了几次……
AC代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int mi(int a,int b)
{ if(b==0)
return a;
else
return mi(b,a%b);
}
bool cmp(int a,int b)
{ return a>b;
}
int num[101000];
char c,d;
int main()
{ int t,i,j,k,pos,ans,ret;
scanf("%d%c",&t,&d);
c=' ';
while(t--)
{ c=' ';
pos=1;
ans=0;
while(c!='\n')
{ scanf("%c",&c);
k=c-'0';
if(k>=0 && k<=9)
num[pos]=num[pos]*10+k;
else if(c==' ' && num[pos]>0)
pos++;
}
if(num[pos]==0)
pos--;
sort(num+1,num+1+pos,cmp);
for(i=1;i<pos;i++)
{ if(ans>=num[i])
break;
for(j=i+1;j<=pos;j++)
{ if(ans>=num[j])
break;
else
ret=mi(num[i],num[j]);
if(ret>ans)
ans=ret;
}
}
printf("%d\n",ans);
}
}