你能说出代码中的问题吗?

问题描述

问题是我们必须在数组中找到重复的数字。有人能告诉我为什么这段代码不起作用吗?

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;
}

请告诉我问题。

解决方法

你需要让 ji+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 语句。