【问题标题】:Need to find duplicates from an array in c++, and then put them in another array需要从c++中的数组中查找重复项,然后将它们放入另一个数组中
【发布时间】:2015-06-07 12:38:25
【问题描述】:

这是我在这里的第一篇文章,如果你能帮助我,我会很高兴。 任务是 - 从 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;
}

【问题讨论】:

  • 请告诉我们你已经走了多远,你到底在哪里卡住了。
  • @KompjoeFriek ,我已经编辑了我的第一篇文章,请你看一下
  • a[0]==a[1] 会将a[0] 的值与a[1] 的值进行比较,如您所料。 || 之后的第二部分a[2] 只会检查 a[2] 中的值是否不为零。您可能还想将该值与a[0] 进行比较,这样就可以得到a[0] == a[2] 等等。
  • 查看编辑后的代码。我已经尝试修复它,但我仍然不知道该怎么做。
  • @KompjoeFriek,有什么想法吗?

标签: c++ arrays input duplicates output


【解决方案1】:

为了让您更好地了解如何解决此问题,我将尝试通过示例向您展示发生了什么。

假设您刚刚输入了通过 cin 请求的 6 个数字,而您的 a[] 变量现在在内存中如下所示:

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

这里的重复是 2 和 6。(对我们人类来说很明显):-)

您开始比较内存中的前两个值:a[0]==a[1],然后将第一个与第三个值进行比较:a[0]==a[2],依此类推。如果其中之一匹配,则您知道a[0] 的值在内存中至少有一个重复项。 每当发生这种情况时,您都想做一些该信息的事情。将其存储在某处(例如您的 b[] 数组)或直接使用 cout &lt;&lt; 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 循环适用于少数和很多数字:

伪代码:

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 次,这将多次存储相同的重复值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2017-09-27
    • 1970-01-01
    • 2013-04-01
    • 2013-11-13
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多