算法初步—散列—A1048

思路:
运用散列的思想,记录不同面值的硬币数,再从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;
}

猜你喜欢

转载自blog.csdn.net/daidaihema/article/details/79218879