
题目描述明明想在学校中请一些同学一起做一项问卷调查为了实验的客观性他先用计算机生成了N个1到1000之间的随机整数N ≤ 1000对于其中重复的数字只保留一个把其余相同的数去掉不同的数对应着不同的学生的学号。然后再把这些数从小到大排序按照排好的顺序去找同学做调查。请你协助明明完成去重与排序的工作。输入描述第 1 行为 1 个正整数N表示所生成的随机数的个数。第 2 行有N个用空格隔开的正整数为所产生的随机数。输出描述输出为多行每行一个正整数为从小到大排好序的不相同的随机数。示例输入text5 8 8 5 3 5输出text3 5 8C 语言解决方案思路利用桶排序计数数组思想因为数字范围固定在1 ~ 1000开辟一个大小为1001的数组bucket初始化为 0。每读入一个数字x就令bucket[x] 1天然实现去重。最后从1到1000遍历数组凡是值为1的下标即为去重排序后的结果依次输出。这种方法比读入后排序再手工去重更简洁高效。代码实现c#include stdio.h #include string.h int main(void) { int n; // 多组输入处理部分华为机考为多组测试数据 while (scanf(%d, n) ! EOF) { int bucket[1001]; memset(bucket, 0, sizeof(bucket)); // 清零 for (int i 0; i n; i) { int x; scanf(%d, x); bucket[x] 1; // 标记出现自动去重 } // 按从小到大顺序输出所有出现过的数字 for (int i 1; i 1000; i) { if (bucket[i]) { printf(%d\n, i); } } } return 0; }