需要在c ++中从数组中找到重复项,然后将它们放在另一个数组中

时间:2015-06-07 12:38:26

标签: c++ arrays input duplicates output

这是我在这里的第一篇文章,如果你能帮助我,我会很高兴。 任务是 - 从6个输入数字创建一个数组,然后将重复的数字放在另一个数组中,然后输出具有重复数字的数组。

你有什么想法吗?我还是个新手,需要一些帮助。先谢谢你们!!

编辑:     我不确定我是否采用正确的方式,这就是为什么我没有发布我已经完成的工作。但就是这样:

#include <iostream>
using namespace std;

int main()
{
int a[6];
int b[6];
int i,z;

for (i=0; i<6; i++){
cin>>a[i];
}
for (z=0; z<6; z++){
if (a[0]==a[1]) b[z]=a[0];
if (a[0]==a[2]) b[z]=a[0];
if (a[0]==a[3]) b[z]=a[0];
if (a[0]==a[4]) b[z]=a[0];
if (a[0]==a[5]) b[z]=a[0];
if (a[1]==a[2]) b[z]=a[1];
if (a[1]==a[3]) b[z]=a[1];
if (a[1]==a[4]) b[z]=a[1];
if (a[1]==a[5]) b[z]=a[1];
if (a[2]==a[3]) b[z]=a[2];
if (a[2]==a[4]) b[z]=a[2];
if (a[2]==a[5]) b[z]=a[2];
if (a[3]==a[4]) b[z]=a[3];
if (a[3]==a[5]) b[z]=a[3];
if (a[4]==a[5]) b[z]=a[4];
else b[z]=0; cout << b[z];

}
return 0;
}

1 个答案:

答案 0 :(得分:0)

为了让您更好地了解如何解决这个问题,我将尝试通过示例向您展示正在发生的事情。

假设您刚刚通过cin输入了您要求的6个号码,而您的a[]变量现在在内存中显示如下:

a[] = { 5, 2, 6, 2, 1, 6 };

这里的副本是2和6(对我们人类来说非常明显): - )

您开始比较内存中的前2个值:a[0]==a[1],然后是第一个和第三个值:a[0]==a[2],依此类推。如果其中一个匹配,则您知道a[0]的值在内存中至少有一个重复。 无论什么时候发生,你都想做那些信息。将其存储在某个位置(例如您的b[]数组)或直接使用cout << a[0]输出。

您现在已经检查了a[0],并且可以在同一庄园中继续a[1],除非您不必与a[0]进行比较,因为您在上一步中执行了此操作。查看您的代码,您似乎已经明白可以跳过它。

让我们说你真的需要存储重复项。这将有助于跟踪您找到的重复项数量。

伪代码:

duplicates = 0;
if (a[0] has a duplicate) { b[duplicates] = a[0]; duplicates++; }
if (a[1] has a duplicate) { b[duplicates] = a[1]; duplicates++; }
// etc...

“有重复”就像你之前的代码一样,如:a[0]==a[1] || a[0]==a[2] || a[0]==[3]等等。

在您的示例中,您只有6个值,因此自己编写所有比较语句并不多。如果你需要用更多的数字来做这个,你需要花费很多年的时间来编写它,并且很容易出现像拼写错误这样的错误。使用for循环适用于少数几个数字:

Pseude代码:

duplicates = 0;
for (z = 0 to 6) {
    for (y = z+1 to 6) {
       if (a[z]==a[y]) {
           b[duplicates] = a[z];
           duplicates++;
           break; // We know it is a duplicate, continue with the next value
       }
    }
}

但即使这并不完美。如果一个数字在内存中出现的次数超过2次,则会多次存储相同的重复值。