欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

P1059 明明的随机数

程序员文章站 2022-05-13 22:47:11
...

这道题后来看了题解里面用桶排好简单呀。

我是先把重的数都变为-100,然后快排(从大到小)
然后再把非-100的数都存到另一数组,再从小到大排

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void *a,const void *b)
{
    return(*(int*)b-*(int*)a);
}
int cmp2(const void *a,const void *b)
{
    return(*(int*)a-*(int*)b);
}
int main()
{
//	srand((int)time(0));
    int n;
    scanf("%d",&n);
    int *a=(int *)malloc(sizeof(int)*n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    int cnt=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]==-100)continue;
        int t=a[i];
        
        for(int j=i+1;j<n;j++)
        {
            if(a[j]==-100)continue;
            if(a[j]==t)
            {
                a[j]=-100;
                cnt++;//记录有多少个数组是-100 
            }
        }
    }
    qsort(a,n,sizeof(int),cmp);//从大到小排
/*	printf("----------------\n");
    for(int i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
        printf("\n----------------\n");*/
    int bv=n-cnt;
    printf("%d\n",bv);
        int b[bv];
        memset(b,0,sizeof(b));
         for(int i=0;i<bv;i++)
        {
            if(a[i]==-100) continue;
            b[i]=a[i];
        }
        qsort(b,bv,sizeof(int),cmp2);//从小到大排
        for(int i=0;i<bv;i++)
        {
            printf("%d ",b[i]);
        }
    
        return 0;
    }