请帮我找一下下面代码的问题: #include<bits/stdc++.h> using namespace std; int main(){ int n,m; cin>>n>>m; vector<int> s(n); vector<int> h(n); for(int i=0;i<n;i++){ cin>>s[i]; } sort(s.begin(),s.end()); for(int a=0;a<n;a++){ for(int b=0;b<n;b++){ for(int c=0;c<n;c++){ int d=m-s[a]-s[b]-s[c]; if(binary_search(s.begin(),s.end(),d)){ h.push_back(s[a]); h.push_back(s[b]); h.push_back(s[c]); h.push_back(d); for(int i=0;i<4;i++){ cout<<h[i]; } } } } } return 0; }
时间: 2024-04-17 21:23:44 浏览: 133
这段代码的问题在于,它没有考虑到重复输出的情况。在最后的嵌套循环中,当满足条件时,会将四个元素分别push到vector h中,并且直接输出这四个元素。这样会导致重复输出相同的组合。
解决这个问题的方法是,在找到符合条件的四个元素后,将它们存储在一个临时vector中,然后将该临时vector与已经保存的组合进行比较,避免重复输出。可以使用set容器来实现这个功能。同时,还需要在输出每个组合后清空临时vector,以便下次使用。
以下是修改后的代码示例:
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> s(n);
vector<int> h;
for (int i = 0; i < n; i++) {
cin >> s[i];
}
sort(s.begin(), s.end());
set<vector<int>> combinations;
for (int a = 0; a < n; a++) {
for (int b = 0; b < n; b++) {
for (int c = 0; c < n; c++) {
int d = m - s[a] - s[b] - s[c];
if (binary_search(s.begin(), s.end(), d)) {
h.push_back(s[a]);
h.push_back(s[b]);
h.push_back(s[c]);
h.push_back(d);
sort(h.begin(), h.end());
combinations.insert(h);
h.clear();
}
}
}
}
for (const auto& combination : combinations) {
for (int i = 0; i < 4; i++) {
cout << combination[i] << " ";
}
cout << endl;
}
return 0;
}
```
这样修改后的代码会确保每个组合只输出一次,避免了重复输出的问题。
阅读全文