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; } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。