【洛谷1106明明的随机数】
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了NN个11到10001000之间的随机整数(N≤100)(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入输出格式
输入格式:
输入有两行,第11行为11个正整数,表示所生成的随机数的个数NN
第22行有NN个用空格隔开的正整数,为所产生的随机数。
输出格式:
输出也是两行,第11行为11个正整数MM,表示不相同的随机数的个数。
第22行为MM个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
输入输出样例
说明
NOIP 2006 普及组 第一题
分析:
该题是考察排序这一算法,这里我用了一种sort排序,即把从a~a+n个数按从小到大的顺序排序,代码如下
sort(a,a+n+1);
本题用到的去重也是一个难点,可以放到排序之后去执行,即用一个循环,如果第i个数与第i+1个数是一样的,就令第i个数为0,不再输出等于0的数;
AC程序如下
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<iomanip> #include<cstring> #include<algorithm>//一大堆头文件,本蒟蒻初学,把会的都打上; using namespace std; int a[1001]; int m; int print(); int main() { int s=0; cin>>m; for(int i=1;i<=m;++i) cin>>a[i]; sort(a,a+m+1);//排序:注意是m+1; for(int i=1;i<=m;++i) { if(a[i]==a[i-1]) a[i-1]=0; else s++; }//去重; cout<<s<<endl; for(int i=1;i<=m;++i) { if(a[i]!=0) cout<<a[i]<<" "; } }
I can do all things