A1048 Find Coins (25 分| hash散列,附详细注释,逻辑分析)

写在前面

  • 思路分析
    • 给出n个正整数和1个正整数m,问n个数字中是否存在1对数字a和b(a <= b),使a+b=m成立
      • 如果有多个,输出a最小的那1对
    • 建立数组a保存每个数字出现的次数,然后判断输出
      • 思考不记录次数是否可行(不可行)
  • 题目简单,细节处理耗费时间

测试用例

  • input:
    8 15
    1 2 8 7 2 4 11 15
    output:
    4 11
    
    input:
    7 14
    1 8 7 2 4 11 15
    output:
    No Solution
    
    input:
    3 14
    1 7 7
    output:
    7 7
    

ac代码

  • #include <iostream>
    using namespace std;
    int a[1001];
    int main()
    {
        int n, m, v, maxv;
        scanf("%d %d", &n, &m);
        for(int i = 0; i < n; i++)
        {
            scanf("%d", &v);
            a[v]++;
            maxv = max(maxv,v);
        }
        // i值大于m,无解
        for(int i = 0; i <= min(m,maxv); i++)
        {
            if(a[i])
            {
                a[i]--;
                if(a[m-i])
                {
                    printf("%d %d", i, m - i);
                    return 0;
                }
            }
        }
        printf("No Solution");
        return 0;
    }
    
  • 学习代码
  • #include <iostream>
    using namespace std;
    int a[1001];
    int main()
    {
        int n, m, temp;
        scanf("%d %d", &n, &m);
        for(int i = 0; i < n; i++)
        {
            scanf("%d", &temp);
            a[temp]++;
        }
        for(int i = 0; i < 1001; i++)
        {
            if(a[i])
            {
                a[i]--;
                if(m > i && a[m-i])
                {
                    printf("%d %d", i, m - i);
                    return 0;
                }
                a[i]++;
            }
        }
        printf("No Solution");
        return 0;
    }
    
发布了328 篇原创文章 · 获赞 107 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/qq_24452475/article/details/100600916