c++ - 数组中的重复数字

标签 c++ c arrays loops for-loop

<分区>

我需要编写一个程序,我必须打印数组中出现两次或两次以上的数字。为了使事情更简单,我正在处理一个排序数组。

这是我的代码。

#include <stdio.h>
int main()
{
    int n,i;
    int a[10]={2,2,2,4,6,6,9,10,10,11};
    printf("%d\n",a[10]);
    for(i=0;i<10;++i)
    {
        if(a[i]==a[i+1] && a[i]!=a[i-1])
            printf("%d ",a[i]);
        else
            continue;
    }
    return 0;
}

代码似乎工作正常,但我不喜欢我的代码,因为在某些时候,循环将 a[0] 的值与 a[-1] 和 a[9] 的值与 a[10] 以及两者的值进行比较这些 a[-1] 和 a[10] 是垃圾值。我确信有更好的方法可以做到这一点,但我想不出任何方法。

另外,我需要扩展上面的程序来计算重复数字的频率。

感谢您的帮助。谢谢!

最佳答案

首先,您不能在 printf 行中访问 a[10],它在您的数组之外。

这应该可以正常工作。

#include <stdio.h>
int main()
{
    int n,i;
    int a[10]={2,2,2,4,6,6,9,10,10,11};
    for(i=0; i < 9; ++i)
    {
        if(a[i] == a[i+1])
            if(i > 0 && a[i] == a[i-1])
                continue;
            else
                printf("%d ",a[i]);
    }
    return 0;
}

编辑:或者你可以使用更短但更难阅读的:

for(i=0; i < 9; ++i)
{
    if(a[i] == a[i+1] && (!i || a[i] != a[i-1]))
        printf("%d ",a[i]);
}

关于c++ - 数组中的重复数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25715163/

相关文章:

c++ - Visual Studio 2010 在项目中创建包/文件夹

c - 在不使用 '-' 运算符的情况下减去两个数字

python - SWIG void * 参数

c - #Define 在整个库中的作用域?

c++ - 根据函数名称数组的索引调用函数

javascript - 将二维数组从 PHP 转换为 JS

c++ - 将 NTFS 文件夹的内容动态合并到虚拟文件夹中

c++ - 如何解释或缩小此视觉泄漏检测器输出中内存泄漏的原因?

c++ - 为什么允许从 const 到非 const 的隐式转换?

c++使用数组而不调用构造函数