洛谷 || 明明的随机数
2020年10月02日 23:50 __ _ _ _ _

点击上方「 蓝字 」关注”程序员Bob”
每天与你不见不散!

每日一句,送给最珍贵的你:
时间并不能证明一切,有些东西还是得靠自己去争取。
本题的解法还是蛮多的,大家有时间还是可以自己研究研究。
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了NN个11到10001000之间的随机整数(N≤100)(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
输入有两行,第11行为11个正整数,表示所生成的随机数的个数NN
第22行有NN个用空格隔开的正整数,为所产生的随机数。
输出格式
输出也是两行,第11行为11个正整数MM,表示不相同的随机数的个数。
第22行为MM个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
输入输出样例
输入
10
20 40 32 67 40 20 89 300 400 15
输出
8
15 20 32 40 67 89 300 400
源代码:
#include<stdio.h>void sort_(int all[], int begin,int end);//快速排序int main(){ int all[100], n, x; scanf("%d", &n); int p = n, z = 1, t = 0; scanf("%d", &all[0]); for (x = 1; x < n; x++) { t = 0; int y, c; scanf("%d", &c); for (y = x - 1; y >= 0; y--) { if (c == all[y]) { p--;//另外再定义一个变量计算数据 t = 1; break;//直接退出y的for循环 } } if (t == 1) continue;//如果成立就跳掉下面两行 all[z] = c;/*其它数据都要更改,所以再定义一个变量来锁定数 组位置*/ z++; } sort_(all,0,p-1); printf("%d\n", p); for (int x = 0; x <= p-1; x++) printf("%d ", all[x]); return 0;}void sort_(int all[], int begin, int end)//快速排序{ if (begin >= end)//如果指向同一个位置就返回 return; int i = begin, j = end, k = all[begin];//排序工作初始化 while (i < j) { while (i < j && all[j] > k) j--; if (i<j) all[i++] = all[j]; while (i < j && all[i] < k) i++; if (i<j) all[j--] = all[i]; } all[i] = k; sort_(all, begin, i - 1);//分别对前后进行排序递归 sort_(all, i + 1, end);}
运行结果:


**最后的话:****刷题要找自己的不足,然后去专攻。 ** ** ** ** 往期推荐: **
Windows10下JDK8下载及java环境配置 2020-09-29
数据结构笔记:线性表走起!(链式存储结构简介) 2020-09-27
数据结构:线性表走起!(顺序存储结构) 2020-09-23
为你,千千万万遍.
关注 程序员Bob 公众号, 与你 一起终 生学习
一键三连,就差你了
预览时标签不可点
阅读
__
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小Bob的博客!











