• 1048. Find Coins (25)


     距离PAT考试还有14天最重要的是做透每一题

    (1)思路暴力

    会超时

    (2)

    用hash存储每个数被M减之后的数

    注意这里会有重复的值所以要用数组存储其数量

    再仔细思考一下,只要用数组存储每个数的数量即可,遍历的时候判断该数组v[M-i]元素的值是否大于1

    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    int num[1010],N,M;
    
    int main() {
      scanf("%d %d",&N,&M);
      memset(num,0,sizeof(num));
      for(int i=0;i<N;i++) {
        int temp;
        scanf("%d",&temp);
        num[temp]++;
      }
      for(int i=1;i<500;i++) {
        if(num[i]) {
          num[i]--;
          if(num[M-i]) {
        printf("%d %d
    ",i,M-i);
        return 0;
          }
          num[i]++;
        } 
      }
      printf("No Solution");
      return 0;
    }

    未简化时的代码

    #include <cstdio>
    #include <map>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    
    int n,m,flag[1000000];
    
    int main() {
      scanf("%d %d",&n,&m);
      vector<int> va;
      map<int,int> ha;
      memset(flag,0,sizeof(flag));
      for(int i=0;i<n;i++) {
        int v;
        scanf("%d",&v);
        flag[v]++;
        ha[v]=m-v;
        va.push_back(v);
      }
    
      sort(va.begin(),va.end());
      int res=0;
      for(int i=0;i<n;i++) {
        if(ha[va[i]] == va[i]) {
          if(flag[va[i]] > 1) {
        res=va[i];
        break;
          } else continue;
        }
        if(ha.find(ha[va[i]]) != ha.end()) {
          res=va[i];
          break;
        }
      }
      if(res == 0) printf("No Solution");
      else printf("%d %d",res,m-res);
      return 0;
    }

  • 相关阅读:
    冒泡排序及优化
    Map的三种遍历
    抽象类以及接口的异同
    安卓仿制新浪微博(一)之OAuth2授权接口
    安卓handler.post问题
    Git——版本控制器概述
    Linux概述及简单命令
    JBoss7配置-支持IPv4和IPv6双栈环境
    作用域public,private,protected,以及不写时的区别
    UML类图画法及类之间几种关系
  • 原文地址:https://www.cnblogs.com/tclan126/p/8570658.html
Copyright © 2020-2023  润新知