我是C ++学生。我需要解决这个问题:“写一个程序,接收一个数字和一个给定数字大小的数组。该程序必须找到给定数字的所有重复项,并将它们推回重复元素的向量中,并打印矢量”。要求是我只允许使用向量库,并且数组的每个重复元素都只能被压入向量一次,例如,我的数组是“ 1、2、1、2、3、4 ...”,向量必须为“ 1,2”。到目前为止,这是我所做的。我的代码可以运行,但是我无法使其相同的重复项仅添加到重复元素的向量中。
#include <iostream>
#include <vector>
int main() {
int n;
std::cin >> n;
int* arr = new int[n];
std::vector<int> repeatedElements;
for(int i = 0; i < n; ++i) {
std::cin >> arr[i];
}
for(int i = 0; i < n; ++i) {
bool foundInRepeated = false;
for(int j = 0; j < repeatedElements.size(); ++j) {
if(arr[i] == repeatedElements[j]) {
foundInRepeated = true;
break;
}
}
if(foundInRepeated) {
continue;
} else {
for(int i = 0; i < n; ++i) {
int count = 1;
for(int j = i + 1; j < n; ++j) {
if(arr[i] == arr[j]) {
++count;
}
}
if(count > 1) {
repeatedElements.push_back(arr[i]);
}
}
}
}
for(int i = 0; i < repeatedElements.size(); ++i) {
std::cout << repeatedElements[i] << " ";
}
std::cout << std::endl;
}
考虑一下您在这里做什么:
if(foundInRepeated) {
continue;
} else {
for(int i = 0; i < n; ++i) { // why?
如果在中i
找不到某个索引处的元素(来自外部循环)repeatedElements
,您将再次遍历整个数组,并添加重复的元素。但是您已经有一个i
感兴趣的,并且还没有添加到中repeatedElements
。您只需要j
在else
分支中进行遍历。
删除标记的行why?
(和右括号)将解决问题。这是一个演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句