测量数组中的唯一数字

Measuring unique numbers in an array

本文关键字:唯一 数字 数组 测量      更新时间:2023-10-16

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

你能在我的代码中找到任何错误吗?我正在尝试测量数组中唯一整数的数量。我使用此代码,但某处似乎存在错误。例:

输入: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;
}

您的排序算法有问题。这将起作用

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

我测试了您的程序,运行了几次,没有注意到任何异常。此外,你的气泡排序算法虽然不是很有效,但仍然比Venkatesh的建议更快,后者必然会在O(n^2)时间内运行。

此外,请尝试更准确地描述您的问题。只是告诉我们它有一个错误,不是很有帮助。请注意,您可以执行以下操作:

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

为您节省一个循环。