题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805432256675840
思路:
1.定义两个数组存储数字和数字的个数
2.从小到大排序,循环判断。第一次遇到数字x小于m-x并且存在m-x这个数的情况,直接输出,退出系统。如果x=m-x,看是否有两个以上的x,有就输出,退出系统。
3.反之无解
#include<iostream>
#include<algorithm>
using namespace std;
//存储数字
int a[100001];
//存储次数
int num[100001];
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
//有几个该数字
num[a[i]]++;
}
//从小到大排序
sort(a, a + n);
for (int i = 0; i < n; i++) {
//a[i]和m-a[i]不相等
if (num[m - a[i]] > 0 && (m - a[i]) > a[i]) {
cout << a[i] << " " << m - a[i];
return 0;
}
//a[i]和m-a[i]相等
else if (m - a[i] == a[i]) {
//a[i]的个数是否大于1
if (num[a[i]] > 1) {
cout << a[i] << " " << m - a[i];
return 0;
}
}
}
cout << "No Solution";
return 0;
}