3、明明的随机数

来源:互联网 发布:淘宝策划部工资 编辑:程序博客网 时间:2024/06/05 22:38

题目描述

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

输入描述:

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

输出描述:

返回多行,处理后的结果
demo


Java code:

import java.util.Arrays;import java.util.Scanner;public class Test {    public static void main(String[] args){        Scanner scan = new Scanner(System.in);        while(scan.hasNext()){            int sum =  scan.nextInt();            int arr[] = new int[sum];            for (int i = 0; i < arr.length; i++) {                arr[i] = scan.nextInt();            }            Arrays.sort(arr);            for (int i = 0; i < arr.length; i++) {                if (i == 0) {                    System.out.println(arr[0]);                }else if (arr[i]!=arr[i-1]) {                    System.out.println(arr[i]);                }            }        }       }}

Idea:

1、Java的方法是先排序,然后再删除重复的值,接下来的C++版本反过来(先删除重复的值,然后再排序)。
2、要注意最后的for循环,其中的if语句的作用是为了防止数组越界的问题。


C++ code:

#include <iostream>#include "string.h"#include <algorithm>using namespace std;#define MAX 1000int main(){    int a[MAX];    int sum;    cin >> sum;    for (int i = 0;i<sum;i++)    {        cin >> a[i];    }    for (int i = 0; i < sum; i++)    {        for (int j = i+1; j < sum; j++)        {            if (a[i] == 0)                continue;            if (a[j] == a[i])            {                a[j] = 0;            }        }    }    sort(a, a + sum);    for (int i = 0; i < sum;i++)    {        if (a[i]>0)        {            cout << a[i] << endl;        }    }    return 0;}

Idea:

1、先把重复的数据给去了:
用两个for循环
第一层实现对数据的所有的 位置 进行遍历
第二层实现对相同数据进行 归零 处理(因为输入的数据是从1-1000,归零不是一定的,也可以改成负数)
2、归零的reason:方便后面的排序过程
3、调用内置的排序
4、输出的时候大于0再输出
5、先去重再排序,使用的内存空间会降低。


Note:

1、Java 实现读取输入内容code
2、Java、C++自带排序sort的使用
3、一个程序总有一些小毛病要修修改改,每次就是调试运行的时候才知道自己哪里哪里出问题了。
以后要多加强这方面的训练,特别是编程思维,先把逻辑关系,预考虑的东西考虑好,然后下手,争取一次成功!