思路:跟上一题差不多,就是多了一个参数,我们可以设前中后三个指针,最左边的指针作为外层循环,固定此数字,找符合条件的另两个,那么内层循环就跟上一题两个指针的情况一样了。注意:后两个数字不能一样,才能确保样例全通过。

#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;

}