问题描述
问题是我们必须在数组中找到重复的数字。有人能告诉我为什么这段代码不起作用吗?
int main()
{
int arr[] = {12,13,14,15,10};
int size = sizeof(arr)/sizeof(int);
int n;
for (int i = 0; i < size; i++)
{
for (int j = 1; j < size; j++)
{
if (arr[i] == arr[j])
{
n = arr[i];
break;
}
}
}
cout<<n;
return 0;
}
请告诉我问题。
解决方法
你需要让 j 从 i+1 开始,否则它可能会匹配自己作为重复数字。
int main()
{
int arr[] = {12,13,14,15,10};
int size = sizeof(arr) / sizeof(int);
int n;
for (int i = 0; i < size; i++)
{
for (int j = i + 1; j < size; j++)
{
if (arr[i] == arr[j])
{
n = arr[i];
break;
}
}
}
cout << n;
return 0;
}
,
找到重复项时,您的外部 for loop
不会中断。如果发现重复元素,您可以使用另一个变量并将其设置为 true
。
int main()
{
int arr[] = {12,10};
int size = sizeof(arr)/sizeof(int);
int n = 0;
bool duplicate_found = false;
for (int i = 0; i < size; i++)
{
for (int j = i + 1; j < size; j++)
{
if (arr[i] == arr[j])
{
n = arr[i];
duplicate_found = true;
}
}
if (duplicate_found) break;
}
cout << n;
return 0;
}
不要在此处使用 goto
语句。使用 goto
是一种不好的做法。正如@schtonn 建议的那样,从 i+1
开始您的内部循环。
break
仅带您脱离内部循环。如果你想跳出这两个循环,你需要 goto
语句。