PAT A1048 Find Coins (25point(s))

题目链接
AC代码

#include<cstdio>
int hashtable[1000];//hashtable[i]表示数字i出现的次数
int main(){
    int n,pay,t;
    scanf("%d %d",&n,&pay);//输入硬币数和付款金额
    for(int i=0;i<n;i++){
        scanf("%d",&t);//输入面值
        ++hashtable[t];//该面值的硬币出现次数加1
    }
    for(int i=1;i<501;i++){//从面值为1到500的硬币开始列举
        if(hashtable[i]&&hashtable[pay-i]){//付款金额分解的两个面值的硬币都存在
        if(i==(pay-i)&&hashtable[i]<=1){//如果两枚硬币面值相同且少于两枚,则失败
            continue;
        }
        printf("%d %d\n",i,pay-i);
        return 0;
        }
    }
    printf("No Solution\n");
    return 0;
}

此题需要注意的是哈希表应该放在全局数据段中,如果放在函数内会导致栈空间溢出而无法AC,且大小不能小于1000,比如大小设置为500,在枚举硬币时付款金额减当前面值可能会超过500,导致段错误

发布了81 篇原创文章 · 获赞 0 · 访问量 674

猜你喜欢

转载自blog.csdn.net/weixin_44546393/article/details/105346640