zoukankan      html  css  js  c++  java
  • 1001 数组中和等于K的数对

    1001 数组中和等于K的数对

    基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
    给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对。例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0,8),(2,6),(3,5)。
    Input
    第1行:用空格隔开的2个数,K N,N为A数组的长度。(2 <= N <= 50000,-10^9 <= K <= 10^9)
    第2 - N + 1行:A数组的N个元素。(-10^9 <= A[i] <= 10^9) 
    Output
    第1 - M行:每行2个数,要求较小的数在前面,并且这M个数对按照较小的数升序排列。
    如果不存在任何一组解则输出:No Solution。
    Input示例
    8 9
    -1
    6
    5
    3
    4
    2
    9
    0
    8
    Output示例
    -1 9
    0 8
    2 6
    3 5
    从两边往中间找,大了就--,小了就++,相等就输出,然后--++。
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <algorithm>
     5 #define  N 50005
     6 #define  ll long long int
     7 using namespace std;
     8 ll a[N];
     9 int main(){
    10     ll k,n;
    11     while(scanf("%lld%lld",&k,&n)!=EOF){
    12         memset(a,0,sizeof(a));
    13         for(int i=1;i<=n;i++){
    14             cin>>a[i];
    15         }
    16         sort(a+1,a+n+1);
    17         bool prime=true;
    18         for(int i=1,j=n;i<j;){
    19             if(a[i]+a[j]>k){
    20                 j--;
    21             }else if(a[i]+a[j]<k){
    22                 i++;
    23             }else{
    24                 prime=false;
    25                 cout<<a[i]<<" "<<a[j]<<endl;
    26                 i++;j--;
    27             }
    28         }
    29         if(prime)
    30             cout<<"No Solution"<<endl;
    31     }
    32     return 0;
    33 }



  • 相关阅读:
    Express之托管静态文件
    Express与NodeJs创建服务器的两种方法
    NodeJs相关系列文章
    CentOS安装SVN
    图片上传之FileAPI与NodeJs
    Git的基本操作
    页面图片懒加载原理
    JavaScript原生的节点操作
    NodeJs之调试
    CentOS下使用NVM
  • 原文地址:https://www.cnblogs.com/zllwxm123/p/7283544.html
Copyright © 2011-2022 走看看