/* * Copyright (c) 2011 alexingcool. All Rights Reserved. */ #include <iostream> #include <algorithm> #include <iterator> #define DEBUG #undef DEBUG using namespace std; int array[] = {2, 9, 7, 5, 4, 10, 20, 11, 18, 1, 8}; const int size = sizeof array / sizeof *array; int compare(const void *lhs, const void *rhs) { return *((int*)lhs) - *((int*)rhs); } void FindSum(int (&array)[size], int sum, int &left, int &right) { qsort(array, size, sizeof(int), compare); #ifdef DEBUG cout << "quick sort result: " << endl; copy(array, array + size, ostream_iterator<int>(cout, " ")); #endif for(int i = 0, j = size - 1; i < j;) { if(array[i] + array[j] == sum) { left = array[i]; right = array[j]; return; } else { if(array[i] + array[j] > sum) j--; else i++; } } left = -1; right = -1; return; } void main() { int left, right; int sum; while(1) { cout << "input sum: "; cin >> sum; FindSum(array, sum, left, right); if(left == -1 && right == -1) cout << "can't find it" << endl; else cout << "left: " << left << " " << "right: " << right << endl; } } 如果结果输出为10 = 1 + 9; 而不是 10 = 3 + 6, 3和6分别是1和9的下标,当然了,不同输出代码略作修改即可 下面的Code只是单纯实现了编程之美解法三: