Greatest Greatest Common Divisor
Accepts: 271
Submissions: 1138
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
Problem Description
Pick two numbers
Input
Multiple test cases. In the first line there is an integer
Output
For each test case, output one line. The output format is Case #
Sample Input
2 4 1 2 3 4 3 3 6 9
Sample Output
Case #1: 2 Case #2: 3
比赛时间内没做出来==
后来补的,从网上借鉴的方法,感觉非常巧妙,用数组直接存储,从大值开始扫,实现如下:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int t;
int n,temp;
int a[100000+10];
int main()
{
scanf("%d",&t);
for(int m=1;m<=t;m++)
{
scanf("%d",&n);
memset(a,0,sizeof(a));
int maxi=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&temp);
a[temp]++;
maxi=max(maxi,temp);
}
int n=0,flag=0;
for(int i=maxi;i>=1;i--)
{
n=0;
for(int j=i;j<=maxi;j+=i)
{
if(a[j])
n+=a[j];
if(n>1)
{
printf("Case #%d: %d
",m,i);
flag=1;
break;
}
}
if(flag)
break;
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。