测量数组中的唯一数字

时间:2014-11-13 22:04:53

标签: c++ arrays numbers unique

好的伙计们我解决了!我的代码是正确的,系统是愚蠢的,输出后需要一个endl ...感谢大家的回复!

你能在我的代码中发现任何错误吗?我试图测量数组中唯一整数的数量。我使用这段代码,但似乎某处有一个bug。 实施例:

输入:4,1,15,10,1

输出:3

这是正确的我的代码输出3,用更大的输入测试它再次它是正确的但当我将我的代码发送到我的大学系统进行评估时,它正确编译代码但告诉我输出错误。

#include <iostream>
using namespace std;


int main()
{   

    int n,d;
    cin>>n;
    int *A=new int[n];

    for(int i=0; i<n; i++)
        cin>>A[i];

    for(int i=1; i<n; i++)
    {
        d=i;
        while(d>0 && A[d] < A[d-1])
        {   
            swap(A[d],A[d-1]);
            d--;
        }
    }

    int count=1;
    int tmp=A[0];
    for(int i=1; i<n; i++)
        if(tmp!=A[i]){count+=1;tmp=A[i];}
    cout<<count;
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您的排序算法存在问题。这将有效

#include <iostream>
using namespace std;

void swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = a;
}

int main()
{   

    int n,d;
    cin>>n;
    int *A=new int[n];

    for(int i=0; i<n; i++)
        cin>>A[i];

    for(int i=0; i<n; i++)
    {
        for (int j =0; j < n; j++) {
        if (A[j] < A[i])
            swap(A[i], A[j]);
    }
    }

    int count=1;
    int tmp=A[0];
    for(int i=1; i<n; i++)
        if(tmp!=A[i]){count+=1;tmp=A[i];}
    cout<<count;
    return 0;
}

答案 1 :(得分:0)

我测试了你的程序,做了几次运行,并没有注意到任何异常。此外,您的冒泡排序算法虽然效率不高,但仍然比Venkatesh&#39;建议,必须在O(n ^ 2)时间内运行。

另外,尝试更准确地描述您的问题。只是告诉我们它有一个bug,不是很有帮助。 请注意,您可以这样做:

for(int i=0; i<n; i++)
{
    cin>>A[i];
    d=i;
    while(d>0 && A[d] < A[d-1])
    {   
        swap(A[d],A[d-1]);
        d--;
    }
}

为你节省一个循环。