注意数组下标 别忘了i,j的重置
还没过
#include <stdio.h> #define N 100000 int cmp(const void*a, const void*b) { return *(int*)a - *(int*)b; } int main() { int n,a[N],flag; long int m; scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d",&a[i]); } scanf("%ld",&m); qsort(a,n,sizeof(a[0]),cmp); //printf("%d\n",a[0]); for(int k=0; k<n; k++) { int i=k+1,j=n-1; while(i<=j) { int mid = (i+j)/2; long int sum = a[k]+a[mid]; if(sum == m) { printf("%d %d",a[k],a[mid]); flag = 1; break; } else if(sum > m) j = mid-1; else i = mid + 1; } if(flag) break; } if(!flag) printf("No"); return 0; }