该功能应该检查是否有重复的号码,但它不能以某种方式工作。
谁知道为什么?#include <iostream>
using namespace std;
int main()
{
int const size = 10;
int arry[size] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10};
int i = 0;
int k = 1;
for (i = 0; i < size; i++)
{
for (k = 1; k < size; k++)
{
if (arry[i] == arry[k])
{
cout << arry[i] << " " << arry[k] << endl;
cout << "duplicate" << endl;
return 0;
}
}
}
cout << "no duplicate" << endl;
return 0;
}
答案 0 :(得分:3)
您应该在i == k
时跳过。
for (i = 0; i < size; i++)
{
for (k = i+1; k < size; k++) // <-- either change HERE
{
if (i != k && arry[i] == arry[k])
// ^^^^^^ or HERE
{
cout << arry[i] << " " << arry[k] << endl;
cout << "duplicate" << endl;
return 0;
}
}
}
答案 1 :(得分:0)
您每次检查每个组合两次 - 例如,您将元素2与元素5进行比较,然后将5与2进行比较。除了您还要检查元素本身的事实(这是蒂姆拉的答案正在防范),你两次做同样的工作。
所以试试
for (i = 0; i < size; i++)
{
for (k = i + 1; k < size; k++)
代替。
你的方法仍然不能很好地扩展,它基本上是O(n ^ 2)。对数组进行排序然后寻找重复的邻居会更快。
答案 2 :(得分:0)
更有效的方法应该是首先对数组进行排序:
std::vector<int> a = {4, 3, 2, 1, 2, 5, 6};
std::sort(std::begin(a), std::end(a));
for (std::size_t i = 1; i < a.size(); ++i) {
if (a[i - 1] == a[i]) {
std::cout << a[i] << " " << a[i] << std::endl;
std::cout << "duplicate" << std::endl;
return 0;
}
}
return 0;