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;
}
上一篇: layer.msg用法
下一篇: layer.msg()消除抖动