思路:跟上一题差不多,就是多了一个参数,我们可以设前中后三个指针,最左边的指针作为外层循环,固定此数字,找符合条件的另两个,那么内层循环就跟上一题两个指针的情况一样了。注意:后两个数字不能一样,才能确保样例全通过。
#include using namespace std;
int main() {
int n, k, i;
cin >> n >> k;
int* arr = new int[n];
for (i = 0;i < n;i++)cin >> arr[i];
int b = 0, c = 1, e = n - 1;
for (b = 0;b < n - 2;b++) {
if (arr[b] == arr[b - 1])continue;
c = b + 1;
e = n - 1;
while (c < e) {
if ((arr[b] + arr[c] + arr[e]) == k && arr[c] != arr[c - 1] && arr[e] != arr[e + 1]&&arr[c]!=arr[e]) {
cout << arr[b] << " " << arr[c] << " " << arr[e] << endl;
c++;
e--;
}
else if ((arr[b] + arr[c] + arr[e]) < k) c++;
else e--;
}
}
delete[]arr;
return 0;
}