codeforces-B. Divisors of Two Integers

一道水题

避坑指南:要记得除重,否则可能导致删除过程中删除第二个答案(所以本人思路中使用了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;

}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值