对N个1到1000之间的随机整数(N≤100),每个数字保留1个并从小到大排序。,正确率只有55%,不知道哪里有问题

#include <stdio.h>
#include <string.h>
int main()
{
int n,i,m,j;
scanf("%d\n",&n);
int arr[100];
for(i=0;i<n;i++)
{
scanf("%d",&m);
getchar();
arr[i]=m;
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(arr[i]==arr[j])
{
arr[j]=arr[n-1];
n--;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
if(arr[j]>arr[j+1])
{
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
printf("%d\n",n);
for(i=0;i<n;i++)
printf("%d ",arr[i]);
return 0;
}

我知道了,你这是去重的时候就有问题了。
你在删掉一个元素之后,需要执行j--,让它退回到上一步去重新判断,否则有多个相同的连续重复值时,会有的没被删掉。
不要图省事,觉得把最后一个元素拿到当前位置也一样
就老老实实的把j后面的所有元素往前挪一个位置,是最稳妥的办法

换个思路呢


#include <stdio.h>

int main()
{
    
    int n,i,m,j;
    scanf("%d",&n);
    int arr[1001]={0};
    
    for(i=0;i<n;i++)
    {
        scanf("%d",&m);
        if(m<1 || m>1000)continue;
        arr[m]=m;
    }

    for(i=0;i<1001;i++)
    {
        if(arr[i]>0)
            printf("%d ",arr[i]);
    }
    return 0;
}