华为机试练习明明的随机数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试练习明明的随机数相关的知识,希望对你有一定的参考价值。

题目描述
明明先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再把这些数从小到大排序。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据)。
输入描述:
输入多行,先输入随机整数的个数,再输入相应个数的整数
输出描述:
返回多行,处理后的结果


思路:可以转换思路,先通过快速排序算法对数据进行排序,然后再有序表中进行去重操作。
解法(C语言版):

#include<stdio.h>

int Partition(int array[], int low, int high)
{
    int pivot = array[low];
    while(low < high)
    {
        while(low < high && array[high] >= pivot)
            --high;
        array[low] = array[high];
        while(low < high && array[low] <= pivot)
            ++low;
        array[high] = array[low];
    }
    array[low] = pivot;
    return low;
}

void QuickSort(int array[], int low, int high)
{
    if(low < high)
    {
        int pivotpos = Partition(array, low, high);
        QuickSort(array, low, pivotpos - 1);
        QuickSort(array, pivotpos + 1, high);
    }
}

int main()
{
    int n, i, k;
    int inputArray[1000], outputArray[1000];
    while(scanf("%d", &n) != EOF)
    {
        for(i = 0; i < n; ++i)
            scanf("%d", &inputArray[i]);
        QuickSort(inputArray, 0, n - 1);
        k = 0;
        for(i = 0; i < n; ++i)
        {
            if(inputArray[i] == inputArray[i + 1])
                k++;
            else
                outputArray[i - k] = inputArray[i];
        }
        for(i = 0; i < n - k; ++i)
            printf("%d
", outputArray[i]);
    }
}

以上是关于华为机试练习明明的随机数的主要内容,如果未能解决你的问题,请参考以下文章

华为机试HJ3:明明的随机数

华为python机试题目:明明的随机数汽水瓶求int型正整数在内存中存储时1的个数取近似值蛇形矩阵数据分类处理数字颠倒

华为机试 java 实现去重排序 用Treeset

华为机试练习代码

[华为机试练习题]57.对象管理器

牛客网华为机试训练第3题 明明的随机数