需要从c++中的数组中查找重复项,然后将它们放入另一个数组中
Need to find duplicates from an array in c++, and then put them in another array
这是我第一次 post 来这里,如果你能帮助我,我将非常高兴。
任务是 - 从 6 个输入数字创建一个数组,然后将重复的数字放入另一个数组,然后输出包含重复数字的数组。
你有什么想法吗?我还是个新手,需要一些帮助。提前谢谢大家!!
编辑:
我不确定我是否走在正确的道路上,这就是为什么我没有 post 我已经完成的事情。但就是这样:
#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;
}
为了让您更好地理解如何解决这个问题,我将尝试通过示例向您展示发生了什么。
假设您刚刚输入了通过 cin
请求的 6 个数字,您的 a[]
变量现在在内存中如下所示:
a[] = { 5, 2, 6, 2, 1, 6 };
这里重复的是 2 和 6。(对我们人类来说很明显):-)
您开始比较内存中的前两个值: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...
"has a duplicate" 就像您之前的代码,例如: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 次,这将多次存储相同的重复值。
这是我第一次 post 来这里,如果你能帮助我,我将非常高兴。 任务是 - 从 6 个输入数字创建一个数组,然后将重复的数字放入另一个数组,然后输出包含重复数字的数组。
你有什么想法吗?我还是个新手,需要一些帮助。提前谢谢大家!!
编辑: 我不确定我是否走在正确的道路上,这就是为什么我没有 post 我已经完成的事情。但就是这样:
#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;
}
为了让您更好地理解如何解决这个问题,我将尝试通过示例向您展示发生了什么。
假设您刚刚输入了通过 cin
请求的 6 个数字,您的 a[]
变量现在在内存中如下所示:
a[] = { 5, 2, 6, 2, 1, 6 };
这里重复的是 2 和 6。(对我们人类来说很明显):-)
您开始比较内存中的前两个值: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...
"has a duplicate" 就像您之前的代码,例如: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 次,这将多次存储相同的重复值。