将之前一段时间在牛客上刷的题给大家分享一下。其中一道题是“明明的随机数”,现在将通过的代码贴一下,供大家参考。
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。
注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。
当没有新的输入时,说明输入结束。
#include <stdlib.h>
#include <stdio.h>
int filter(int *array,int count)
{
int i,j;
int *p=array;
for(i=0;i<count;i++)
{
for(j=i+1;j<count;j++)
{
if(*(p+i)==*(p+j))
{
*(p+j)=0;
}
}
}
int k=0;
for(i=0;i<count;i++)
{
if(*(p+i)!=0)
{
*(p+k)=*(p+i);
k++;
}
}
return k;
}
void sort(int *array,int count)
{
int i,j,temp;
int *p = array;
for(i=0;i<count;i++)
{
for(j=i+1;j<count;j++)
{
if(*(p+i)>*(p+j))
{
temp = *(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
}
int main()
{
int m,n;
int q;
int *array;
int i;
int k;
int j;
while(scanf("%d",&m)!=EOF)
{
array = (int *)malloc(sizeof(int)*m);
for(i=0;i<m;i++)
{
scanf("%d",&n);
array[i] = n;
//printf("n=%d\n",n);
}
k = filter(array,m);
//printf("k=%d\n",k);
sort(array,k);
for(j=0;j<k;j++)
{
printf("%d\n",array[j]);
}
free(array);
}
}