zoukankan      html  css  js  c++  java
  • 明明的随机数(小明的调查作业)

    明明的随机数

    又名:小明的调查作业

    题目描述

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

    输入格式

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

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

    输出格式

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


    样例输入

    10
    20 40 32 67 40 20 89 300 400 15

    样例输出

    8
    15 20 32 40 67 89 300 400

    解法一

      首先应该可以很快想到一个浅显的方法:读入数据并且进行标记,若标记则存入vector,反之跳过,最后sort。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n,vis[1005];
     4 int main ()
     5 {
     6     vector<int> v;
     7     cin>>n;
     8     for(int i=0;i<n;i++)
     9     {
    10         int x;
    11         cin>>x;
    12         if(vis[x]==0)
    13         {
    14             v.push_back(x);
    15             vis[x]=1;
    16         }
    17     }
    18     sort(v.begin(), v.begin() + v.size()); 
    19     cout<<v.size()<<endl;
    20     for(int i=0;i<v.size();i++)
    21     {
    22         cout<<v[i]<<" ";
    23     }
    24     return 0;
    25 }

      有些注意事项:

    • 第3行,将变量(数组)定义为全局,让系统自动初始化,主要是防止vis内有一些奇怪的数字,可能会导致第12行的判断失误;
    • 第18行,必须“+v.size()”而非n,因为在排序之前已经进行了去重,所以长度不一定还是n

    解法二

      其实并不需要vector的辅佐,只需要维护vis数组即可。每当输入一个数字,就 vis[输入的数字]=1; ,在标记完之后,循环判断&输出;每次判断vis[i]是否为1,若为1则输出i(下标),之所以直接输出下标,是因为下标是顺序的,就免去了排序~

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n,vis[1005];
     4 int main ()
     5 {
     6     cin>>n;
     7     for(int i=1;i<=n;i++)
     8     {
     9         int t;
    10         cin>>t;
    11         vis[t]++;
    12     }
    13     int cnt=0;
    14     for(int i=0;i<1000;i++)
    15     {
    16         if(vis[i]!=0)
    17         {
    18            cnt++;
    19         }
    20     }
    21     cout<<cnt<<endl;
    22     for(int i=0;i<1000;i++)
    23     {
    24         if(vis[i]!=0)
    25         {
    26             cout<<i<<" ";
    27         }
    28     }
    29     cout<<endl;
    30     return 0;
    31 }

    解法三

      还有一种相对“高级”的写法,用set。set有俩特性,一是存入数据时自动去重,而是存入后自动排序。量身定制的题目哇!

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main ()
     4 {
     5     set<int> s;
     6     int n;
     7     cin>>n;
     8     for(int i=1;i<=n;i++)
     9     {
    10         int x;
    11         cin>>x;
    12         s.insert(x);
    13     }
    14     cout<<s.size()<<endl;
    15     for (set<int>::iterator it = s.begin(); it != s.end(); it++) 
    16     {
    17         cout << *it << " ";
    18     }
    19     return 0;
    20 }

    若阁下喜欢,赏一赞可否?

    感谢您的阅读o(* ̄▽ ̄*)ブ

  • 相关阅读:
    ValueError:Expected more than 1 value per channel when training, got input size torch.Size([1, 512, 1, 1])
    指定GPU运行
    ModuleNotFoundError: No module named 'past'
    ImportError: libSM.so.6: cannot open shared object file: No such file or dir
    ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
    zsh: command not found: conda
    TypeError: Class advice impossible in Python3. Use the @implementer class decorator instead.
    数据结构(八)图
    数据结构(二)线性表
    数据结构(七)数与二叉树
  • 原文地址:https://www.cnblogs.com/DYXM/p/13508054.html
Copyright © 2011-2022 走看看