明明的随机数

明明的随机数

题目

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。 题目出处

思路

去重和排序。

去重可以通过修改重复值无关量实现,也可以去除独立值到一个数组中。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#pragma warning(disable : 4996)                        //忽略scanf的安全警告
#include<stdio.h>
#include<stdlib.h>
int* test(int a[], int p); //去重和排序函数
int comp(const void*, const void*); //辅助排序函数

int main(void)
{
int a[1000];
int i ,j;
int p;
for (; scanf("%d", &p) == 1;) {
for (i=0; i < p; i++) //录入数据
scanf("%d", &a[i]);
test(a, p);
for (j = 0; j < p; j++)
if (a[j] > 0) printf("%d\n", a[j]);
}
return 0;


}
int * test(int a[], int p)
{
int i, j, temp;
for (i = 0; i < p; i++)
for (j = i + 1; j < p; j++)
if (a[i] == a[j]) a[j] = 0; //遍历数组 将重复的设置为无关数据0 达到去重的目的
qsort(a, p, sizeof(int), comp); //排序函数
/*for (i = 0; i < p; i++) 冒泡法排序,但效率没有qsort高
for (j = i + 1; j < p; j++)
if (a[i] > a[j])
{
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
'*/

}
int comp(const void*a, const void*b)
{
const int* a1 = (const int*)a;
const int* b1 = (const int*)b;
return (*a1 - *b1);
}

反思

并不复杂,去重方式多种多样,可以参考思路中的方法,将数据一位一位的存储到另一个数组中,在每次存储前遍历新数组,如果已经有该值便舍弃待存储值,从而达到去重的目的。

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020 lsengard
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信