明明的随机数

2018-06-17 21:44:41来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

/p

问题描述
  明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
  输入有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
 
解题思路:
      该题可以边输入随机数,边排序,并实现所有数字不重复
#include<iostream>
using namespace std;
int a[100];
int find(int x, int num)
{//查找x可以插入的位置,并返回该位置,如果
 //没找到(存在相等的数)返回-1 
   if(x > a[num-1])
       return i;
   else if(x < a[0])
       return 0;
   else
   {
       for(int j = 0; j < i-1; j++)
       {
           if(x < a[j+1] && x > a[j])
               return j+1;
       }
       return -1;
   }
}

void insert(int x, int num, int pos)
{//将该值插入到a[pos]的位置 
    for(int j = num-1; j >= pos; j--)
       a[j + 1] = a[j];
    a[pos] = x;
}
int main()
{
    int n, x, pos; 
    while(cin>>n)
    {//n为总的随机数,num记录不重复的随机数的个数,至少为1 
        int num = 1;
        for(int i = 0; i < n; i++)
        {
            cin>>x;
            if(i == 0)
                a[0] = x;
            else
            {
                pos = find(x, num);
                if(pos != -1)
                {
                    insert(x, num, pos);
                    num++;
                }  
            }
        }
        cout<<num<<endl;
        for(int i = 0; i < num; i++)
           cout<<a[i]<<" ";
        cout<<endl;
    }
}

 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:P1789 【Mc生存】插火把

下一篇:hdu 6191--Query on A Tree(持久化字典树)