【洛谷1106明明的随机数】

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了NN个11到10001000之间的随机整数(N≤100)(N100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入输出格式

输入格式:

 

输入有两行,第11行为11个正整数,表示所生成的随机数的个数NN

22行有NN个用空格隔开的正整数,为所产生的随机数。

 

输出格式:

 

输出也是两行,第11行为11个正整数MM,表示不相同的随机数的个数。

22行为MM个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

 

输入输出样例

输入样例#1: 复制
10
20 40 32 67 40 20 89 300 400 15
输出样例#1: 复制
8
15 20 32 40 67 89 300 400

说明

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]<<" ";
    }
}

 

posted @ 2019-02-20 20:52  蒟蒻hqk  阅读(455)  评论(0编辑  收藏  举报