#include<iostream>
#include<algorithm>
using namespace std;
const int MAX_N=50000;
int K,N,A[MAX_N];
int main()
{
int i,j;
scanf("%d %d",&K,&N);
for(i=0;i<N;i++)
scanf("%d",&A[i]);
sort(A,A+N);
bool flag=false;
i=0,j=N-1;
while(i<j)
{
N=A[i]+A[j];
if(K==N){
printf("%d %d\n",A[i++],A[j--]);
flag=true;
}
else if(N<K) {i++;}
else
{j--;}
}
if(!flag) printf("No Solution");
return 0;
}
这是51Nod里简单的题,但是一开始我还是没做出来,可能我太菜了。
基本思路:首先排序一下数组里的元素大小,然后分别定义首元素和尾元素,判断当首元素小于尾元素,如果两者加起来等于那个整数,就输出首尾元素;如果不等于就继续向里面寻找,直至全部查询完毕。