将之前一段时间在牛客上刷的题给大家分享一下。其中一道题是“明明的随机数”,现在将通过的代码贴一下,供大家参考。
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了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); } }