微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决你能说出代码中的问题吗?

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

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 语句。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。