一道水题
避坑指南:要记得除重,否则可能导致删除过程中删除第二个答案(所以本人思路中使用了set)
解题思路:首先数组中最大值是其中的大数,直接输出,接下来只需找到该数所有因子并删除他们,剩下的就是小数的因子,找到其中的最大值输出即可
#include<bits/stdc++.h>
using namespace std;
int n,a[222],cnt,ans=-1;
set <int> st;
int cmp(int a,int b){
return a>b;
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n,cmp);
cout<<a[0]<<" ";
int l=a[0];
for(int i=0;i<n;i++){
if(l%a[i]==0&&st.count(a[i])==0){
st.insert(a[i]);
a[i]=0;
}
}
sort(a,a+n,cmp);
cout<<a[0]<<endl;
return 0;
}
重要知识:本题用到了cmp+sort的从大到小排序,这是一个很有用的技巧
另解(此处不细讲,正常很难想到):
#include<bits/stdc++.h>
using namespace std;
int n,a[222],cnt,ans=-1;
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
cout<<a[n-1]<<" ";
if(a[n-2]==a[n-1]){
cout<<a[n-1]<<endl;
return 0;
}
for(int i=n-2;i>0;i--)
if(a[i]==a[i-1] || a[n-1]%a[i]!=0){
cout<<a[i]<<endl;
return 0;
}
}