2020-08-24

明明的随机数(详解)

总时间限制:1000ms 内存限制:65536KB
题目描述

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

输入INPUT:
输入格式

有2行,第1行为1个正整数,表示所生成的随机数的个数:N;

第2行有N个用空格隔开的正整数,为所产生的随机数。
输入样例

10

20 40 32 67 40 20 89 300 400 15
输出OUTPUT:
输出格式

也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输出样例

8

15 20 32 40 67 89 300 400

代码如下

#include
#include
using namespace std;
int main(){
    int N,sjs,gs[1000]={0};//N是所生成的随机数的个数,n个随机数,gs为1~1000中每个数初始个数为0
    scanf("%d",&N);//输入N
    for(int i=1;i<=N;i++){//
        scanf("%d",&sjs);//循环输入n个随机数
        gs[sjs]=1;//每个sjs的个数从零变为1
    }
    int count=0;//count是不相同随机数的个数
    for(int i =1;i<=1000;i++){
      if(gs[i]==1) count++; //不相同的随机数个数加++
    }
    cout<<count<<endl;//输出不相同随机数的个数
    int flag=0;//
    for(int i=1;i<=1000;i++){
        if(gs[i]==1){//如果第i个数次数为1
            if(flag!=0) cout<<" "<<i;//且如果前面不是有0个数比它小,那么输出i
            else cout<<i;//如果是最小的话,那么输出i
        flag++;// 每次第几个数++;
         
        }
    }
  
    return 0;
}

ps:这是我第一篇题解~

你可能感兴趣的:(2020-08-24)