因为支付的金额不大于1000,我们可以开个硬币金额的数组a[1001]
(只是恰好因为题目给的范围很小)
显然,大于支付金额的硬币面额是不需要的,可以直接排除
最后从1开始遍历,检测a[m-i]与a[i]是否都大于0就行了
注意如果i==m-i,则检测a[i]是否大于1
#include<iostream>
using namespace std;
int main(){
int n,m,a[1001]={},temp;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>temp;
if(temp<=m)a[temp]++;
}
for(int i=1;i<=m/2;i++){
if(a[i]&&a[m-i]){
if(i!=m-i){
cout<<i<<" "<<m-i;
return 0;
}else{
if(a[i]>=2){
cout<<i<<" "<<m-i;
return 0;
}
}
}
}
cout<<"No Solution";
return 0;
}