首页 > 试题广场 > 明明的随机数
[编程题]明明的随机数

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



Input Param

n               输入随机数的个数

inputArray      n个随机整数组成的数组


Return Value

OutputArray    输出处理后的随机整数



注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。




输入描述:

输入多行,先输入随机整数的个数,再输入相应个数的整数



输出描述:

返回多行,处理后的结果

示例1

输入

11
10
20
40
32
67
40
20
89
300
400
15

输出

10
15
20
32
40
67
89
300
400




#include <iostream>
using namespace std; int main() { int N, n; while (cin >> N) { int a[1001] = { 0 }; while (N--) { cin >> n; a[n] = 1; } for (int i = 0; i < 1001; i++) if (a[i]) cout << i << endl; } return 0; }


编辑于 2019-03-20 14:21:35 回复(205)
#include<iostream>
#include<set>
 
using namespace std;
 
int main(){
    int loop = 0;
    while (cin >> loop)                   //看题目,set容器
    {
        int a[1000], tem, i = 0;
        for (int i = 0; i < loop; i++) cin >> a[i];
        set<int> num(a, a + loop);
        for (set<int>::iterator it = num.begin(); it != num.end(); it++){
            cout << *it << endl;
        }
    }
    return 0;
}

发表于 2016-08-22 16:45:23 回复(12)
//这个问题的表述本身有问题,它的测试数据不止有一组,很多朋友估计是因为这个原因一直没有通过
#include<stdio.h>
int main()
{
int n,a[10000],i,j,k,temp;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]==a[j])
{
for(k=j+1;k<n;k++)
a[k-1]=a[k];
n--;
j--;
}
}
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<n;i++)
printf("%d\n",a[i]);
}
}

发表于 2016-01-09 21:16:29 回复(36)

import java.util.Scanner;
 /** 
 * 1、测试数据有多组,一定要有while
 * 2、需要手动输入数据,而不是计算机产生随机数 
 * @author Administrator 
 */
public class Main {
    public static void main(String[] args) {
        Scanner sr = new Scanner(System.in);
 
        while(sr.hasNext()) {
            intn = sr.nextInt();
            int[] a = newint[n];
            for(inti = 0; i < n; i++) {
                a[i] = sr.nextInt();
            }
            int[] c = qucong(a);
 
            for(inti = 0; i < 1000; i++) {
                if(c[i] == 1) {
                    System.out.println(i);
                }
            }
        }
    }
 
    public static int[] qucong(int[] a) {
        int[] b = newint[1000];
        for(inti = 0; i < 1000; i++) {
            b[i] = 0;
        }
        for(inti = 0; i < a.length; i++) {
            b[a[i]] = 1;
        }
        returnb;
    }
}
编辑于 2016-03-02 15:55:10 回复(32)

python三行代码解法:

while True:
    try:

        a,res=int(input()),set()
        for i in range(a):res.add(int(input()))
        for i in sorted(res):print(i)


    except:
        break
发表于 2017-10-04 15:03:28 回复(24)

import java.util.Scanner;
import java.util.TreeSet;

public class Main
{
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			
			TreeSet<Integer> set=new TreeSet<Integer>();
			int n=sc.nextInt();
			if(n>0){
				for(int i=0;i<n;i++){
					set.add(sc.nextInt());
				}
			}
			for(Integer i:set){
				System.out.println(i);
			}
		}
	}
}








发表于 2016-03-12 20:29:44 回复(57)
学号一到一千,随机数还不超过一千,去重,排序,我去,,,
怎么这么熟悉,这不是桶排序么!!!
#include<iostream>
#include<vector>
using namespace std;
int main()
{
	int nums; // 表示随机数个数
	
	while (cin >> nums)
	{ vector<int> id(1001, 0); int tmp; for (int i = 1; i <= nums; i++)
		{
			cin >> tmp; id[tmp]++;
		}
		for (int j = 1; j < id.size(); j++)
			if (id[j]>0) cout << j << endl;

	}

	return 0;
}

编辑于 2016-07-15 17:52:50 回复(14)
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int a[1000],b[1001]={0},i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
b[a[i]]++;
for(i=0;i<1001;i++)
{
if(b[i]!=0)
printf("%d\n",i);
}
}
return0;
}
编辑于 2017-08-28 00:50:05 回复(14)
我感觉我还是来一个普通人的写法吧,大神们的代码我真是看的头疼。这个思路很简单,一看就懂
import java.util.Scanner;
import java.util.TreeSet;
import java.util.Arrays;
 
public class Main
{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        while(scan.hasNext()){
            int n = scan.nextInt();
            int[] array = new int[n];
            for(int i=0;i<n;i++){
                array[i] = scan.nextInt();
            }
            Arrays.sort(array);//对输入的数组进行排序
            //对排好序的数组中重复的数组进行选择输出,首先输出第一个数
            System.out.println(array[0]);
            for(int i=1;i<n;i++){
                if(array[i] != array[i-1])
                    System.out.println(array[i]);
            }
        }
    }
}

发表于 2016-06-02 10:05:15 回复(21)
import java.util.*;
//测试数据有多组
public class Main{
    public static void main(String[] args){
        int N=0;
        Set<Integer> set=new TreeSet<Integer>();
        //set没有排序的方法,
		//可以Set set = new TreeSet()
		//TreeSet存储的时候已经是排好序的
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNext()){
            N=scanner.nextInt();
            set.clear();
            for(int i=0;i<N;i++){
                set.add(scanner.nextInt());
            }
            Iterator<Integer> it=set.iterator();
            while(it.hasNext()){
                System.out.println(it.next());
            }
        }
    }
    
} 


编辑于 2016-06-27 12:00:27 回复(3)
/*
使用<algorithm>中的sort()进行排序。
排好序输出时进行去重,若要输出的数和前一个输出的数相同则不输出该数。
*/
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    while(cin >> n){
        int inputArray[n];
        int tmp;
        for(int i=0;i<n;i++){
            cin >> tmp;
            inputArray[i] = tmp;
        }
        sort(inputArray,inputArray+n);
        if(n==1)
            cout<<inputArray[n-1]<<endl;
        else{
            cout<<inputArray[0]<<endl;
            for(int i=1;i<n;++i){
                if(inputArray[i]!=inputArray[i-1])
                    cout << inputArray[i] << endl;
            }
        }
    }

    return 0;
}


发表于 2016-03-01 22:17:14 回复(9)
我用nodejs我骄傲
使用nodes最怕的就是这样的多行输入,我想到一个好方法,就是用一个全局的数组存放输入,
data[0]为输入的数据个数,data[1-n]为输入的数据。
const readline = require('readline');
const rl = readline.createInterface(process.stdin,process.stdout);
var data = [];
rl.on('line',function(ans){
data.push(ans);
var n = data[0]-0;
var filterarr = [];
var arr = [];
if(data.length==n+1){
arr = data.slice(1);
for(var k = 0;k<arr.length;k++){
var ele = arr[k];
if(filterarr.indexOf(ele)==-1){
filterarr.push(ele);
}
}
filterarr.sort(function(a,b){return a-b}).map(function(i){console.log(i)});
data = data.slice(0,0);
}
})

编辑于 2016-08-11 22:57:24 回复(2)
//开始288通不过,后来改为while(cin>>n) 将输出放到这个while循环内,就能够通过了

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	int n, iA;

	while (cin >> n)
	{
		vector<int> inputArray;
		bool flag = true;
		for (int i = 0; i < n; i++)
		{
			cin >> iA;
			for (int j = 0; j < inputArray.size(); j++)
			{
				if (iA == inputArray[j])
				{
					flag = false;
					break;
				}
			}
			if (flag)
			{
				inputArray.push_back(iA);
			}
			flag = true;
		}

		sort(inputArray.begin(), inputArray.end());
		vector<int>::iterator it;
		for (it = inputArray.begin(); it != inputArray.end(); it++)
		{
			cout << *it << endl;
		}
	}
	
	return 0;
}

发表于 2016-01-04 20:03:59 回复(7)
不要贴代码了,题目难度不大。但是有个坑,测试数据有多组。
重要的事情说三遍:测试数据有多组,测试数据有多组,测试数据有多组。
N1 ..............
N2 ..............
N3 ..............
发表于 2017-05-22 21:17:24 回复(0)
1)hash表
2)STL的set
#include<iostream>
#include<set>
#include<vector>

using namespace std;

int main(){
    
    //用一个数组作为哈希表
    /*int n;
    while(cin>>n){  
        vector<int> input(1001,0);
        int tmp;
 		for(int i = 0; i < n; ++i){
            cin>>tmp;
            input[tmp]++;
        }
        for(int i = 1; i <= 1000; ++i){
            if(input[i] > 0) 
                cout<<i<<endl;
        }
    }*/
    
    //使用stl的set
    int n;
    set<int> intSet;
    while(cin>>n){
        int tmp;
        for(int i = 0; i < n; ++i){
            cin>>tmp;
            intSet.insert(tmp);
        }
        set<int>::iterator it;
        for( it = intSet.begin(); it != intSet.end(); ++it)
            cout<<*it<<endl;
        intSet.clear();
    }
    
	return 0;
}

发表于 2017-05-22 15:11:15 回复(5)
#include<iostream>
#include<algorithm>
using namespace std;

int main()
 {
    int n;
    int c;
    while(cin>>n)
    {
       int *a=new int[n];动态分配数组a
      for(int i=0;i<n;i++)
       {
         cin>>c;
          a[i]=c;       
       }   
        sort(a,a+n);
    
         for(int i=0;i<n;i++)
       {
         if(a[i]!=a[i+1])
             cout<<a[i]<<endl;
       }   
		 delete []a;释放数组a内存
    }
    return 0;
}

//使用set容器其实更方便,便于处理更复杂的问题;
//#include<iostream>
//#include<algorithm>
//#include<set>
//using namespace std;
//
//int main()
// {
//    int n;
//    int c;
//	set<int> s;
//    while(cin>>n)
//    {
//      for(int i=0;i<n;i++)
//       {
//         cin>>c;
//          s.insert(c);       
//       }   
//    
//         for(set<int>::const_iterator p=s.begin();p!=s.end();p++)
//       {
//             cout<<*p<<endl;
//       }   
//		 s.clear();
//    }
//    return 0;
//}

发表于 2016-07-11 15:40:25 回复(4)


#include <bits/stdc++.h>
using namespace std;

bool vis[1001];

int main(){
    int n, x;
    while(scanf("%d", &n) == 1){
        memset(vis, 0, sizeof vis);
        while(n--){
            scanf("%d", &x);
            vis[x] = true;
        }
        for(int i = 1; i <= 1000; ++i) if(vis[i]) printf("%d\n", i);
    }
    return 0;
}

发表于 2016-05-11 12:41:54 回复(2)
while True:
    try:
        n=int(input())
        r=[]
        for i in range(n):
            r.append(int(input()))
        for i in sorted(set(r)):
            print(i)
    except:
        break

发表于 2018-03-21 19:09:26 回复(5)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;


public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int count = scan.nextInt();
		int input = 0;
		if(count>0){
			List list = new ArrayList<Integer>();
			while(count>0){
				input = scan.nextInt();
				list.add(input);
				--count;
			}
			Collections.sort(list);
			int length = list.size();
			List flag = new ArrayList();
			for(int i = 0;i<length-1;i++){
				if(list.get(i)==list.get(i+1)){
					flag.add(i);
				}
			}
			for(int i = 0;i<flag.size();i++){
				list.remove((int)flag.get(i));
			}
			
			for(int i = 0;i<list.size();i++){
				System.out.println(list.get(i));
			}
		}
	}

}


编辑于 2016-03-02 08:29:11 回复(2)
###人生苦短,我用python
import sys
while True:
    try:
        data=[]
        udata=[]
        n=int(sys.stdin.readline())
        for i in range(n):
            a=int(sys.stdin.readline())
            data.append(a)
        udata=list(set(data))
        udata.sort()
        for y in udata:
            print y
    except:
        break

发表于 2016-08-03 23:32:41 回复(10)