[2016-05-09][51nod][1001 数组中和等于K的数对]

  • 时间:2016-05-09 21:37:17 星期一

  • 题目编号: [2016-05-09][51nod][1001 数组中和等于K的数对]

  • 题目大意:给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对。

  • 分析:直接暴力寻找

  1. #include<stdio.h>
  2. #include<algorithm>
  3. using namespace std;
  4. const int maxn = 50000 + 10;
  5. int a[maxn];
  6. int main(){
  7. int k,n;
  8. scanf("%d%d",&k,&n);
  9. for(int i = 0 ; i < n ; ++i){
  10. scanf("%d",&a[i]);
  11. }
  12. sort(a,a+n);
  13. int i = 0,j = n - 1,tmp,flg = 1;
  14. while(i < j){
  15. tmp = a[i] + a[j];
  16. if(tmp == k){
  17. printf("%d %d\n",a[i++],a[j--]);flg = 0;
  18. }else if(tmp < k) ++i;
  19. else --j;
  20. }
  21. if(flg) puts("No Solution");
  22. return 0;
  23. }
  1. #include<stdio.h>
  2. #include<set>
  3. using namespace std;
  4. int main(){
  5. set<int> s;
  6. int n,tmp,k,flg = 1;
  7. scanf("%d%d",&k,&n);
  8. for(int i = 0 ; i < n ; ++i){
  9. scanf("%d",&tmp);
  10. s.insert(tmp);
  11. }
  12. for(set<int>::iterator its = s.begin();its != s.end();++its){
  13. tmp = k - *its;
  14. if(tmp <= *its) break;
  15. if(s.find(tmp) != s.end()){
  16. printf("%d %d\n",*its,tmp);
  17. flg = 0;
  18. }
  19. }
  20. if(flg) puts("No Solution");
  21. return 0;
  22. }


来自为知笔记(Wiz)


posted on 2016-05-09 21:48  红洋  阅读(173)  评论(0)    收藏  举报

导航