美文网首页
PAT甲级 1048 Find Coins (25 分)

PAT甲级 1048 Find Coins (25 分)

作者: Rick97 | 来源:发表于2018-10-30 10:32 被阅读0次

    原题链接 PAT甲级 1048 Find Coins (25 分)

    题目大意 给定n个正整数和m,判断如果n个正整数中是否有a+b=m,如果有则输出。如果有多对a、b,则输出a最小的情况。反之,输出"No Solution"。

    分析 建立coin数组(int型),记录正整数a的出现次数 。使用set保存输入的正整数,set默认从小到大排列,以及不重复出现元素,这正是我们这道题所需要的。
    另外,如果正整数a刚好是m的一半,即a+b=m,b=a。那么coin[a]必须大于等于2,不然就是重复使用这个硬币了。

    #include<iostream>
    #include<set>
    using namespace std;
    int coin[100010]={0};
    set<int> s;
    int main(){
        int n, m, t;
        scanf("%d%d", &n, &m);
        for(int i=0;i<n;i++){
            scanf("%d", &t);
            coin[t]++;
            s.insert(t);
        }
        for(auto it=s.begin();it!=s.end();it++){
            if(coin[m-*it]>(2*(*it)==m?1:0)){
                printf("%d %d", *it, m-*it);
                return 0;
            }
        }
        printf("No Solution");
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:PAT甲级 1048 Find Coins (25 分)

          本文链接:https://www.haomeiwen.com/subject/fggwtqtx.html