一道面试题--输入一堆随机数(0-1000),这里面会有重复的数字,把他们去除掉。然后由大到小排列。

1.问题说明

11
10
20
40
32
67
40
20
89
300
400
15
10
15
20//只显示1次
32
40//只显示1次
67
89
300
400

正常的算法:

1.遍历所有数组,去除掉重复的数字
2.使用XX排序法,进行数字的排序。

眼前一亮的机器算法

1.生成1-1000的数组,全部给0
2.输入,或生成随机数,将随机数的数字所对应的数组值置1
输入数字 15,则a[15] = 1;
3.遍历所有数组,如果a[i]>0,则输出i。

#include<iostream>
using namespace std;

int main()
{
    int i, k, N, L;
    int a, Hash[1001];

    while (cin >> N)
    {
        /*初始化1000个数组*/
        for (i = 0; i<1001; i++)
            Hash[i] = 0;

        /*输入排列的数组,将这个数字的地方置1*/
        for (i = 0; i<N; i++)
        {
            cin >> a;
            Hash[a]++;
        }
        /*遍历1000个数组 如果这个地方是大于1就打印*/
        for (i = 0; i<1001; i++)
            if (Hash[i]>0)
                cout << i << endl;
    }
    return(0);
}

扩展

int main()
{
    int arr[100], sum = 0;
    char c;
    int x = 4;
    while (x--)
    {
        cin >> c;
        arr[c] = 1;
    }
    for (int i = 0; i < 100; i++)
        if (arr[i] == 1)
            sum++;
    cout << sum;
    system("pause");
}

猜你喜欢

转载自blog.csdn.net/csdn_kou/article/details/80191182
今日推荐