思路:
运用散列的思想,记录不同面值的硬币数,再从1遍历寻找两个硬币即可
注意:
当出现两个相同面值硬币的和恰好等于需要钱数的时候,要注意判断数量是否>=2,如7+7=14
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int main()
{
int N,M,hash[1005]={0},coin;
scanf("%d%d",&N,&M);
for(int i=0;i<N;i++)
{
scanf("%d",&coin);
hash[coin]++; //储存对应面值的硬币数
}
for(int i=1;i<M;i++) //从面值小的开始寻找
{
if(hash[i] != 0) //能否有V1+V2=M
{
if(M-i == i) //当出现两个面值相等的情况要判断是否有多张,如7+7=14
{
if(hash[i] >= 2)
{
printf("%d %d",i,i);
return 0;
}
}
else if(hash[M-i] != 0)
{
printf("%d %d",i,M-i);
return 0;
}
}
}
printf("No Solution");
return 0;
}