题解 | #明明的随机数#

明明的随机数

https://www.nowcoder.com/practice/3245215fffb84b7b81285493eae92ff0

#include <stdio.h>
#include <string.h>


/*
描述
明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。
数据范围: 1≤n≤1000,输入的数字大小满足1≤val≤500

输入描述:
第一行先输入随机整数的个数N。 接下来的N行每行输入一个整数,代表明明生成的随机数。具体格式可以参考下面的"示例"。

输出描述:
输出多行,表示输入数据处理后的结果
*/

/*
解题思路:
1,数字范围1≤val≤500,加之去重,考虑用512bits(32*16)构建桶排序
2,每输入一个就可以处理一个
*/

#define bitsizeof(bits) ((int)(sizeof(bits)*8))

int bits[16];

int getbitvalue(int* bitsbase, int bitssize, int bitindex) {
    int ret = -1, int32pos = 0, bit32 = 0;

    if (bitindex < bitssize) {
        int32pos = bitindex / bitsizeof(bitsbase[0]);
        bit32 = bitindex % bitsizeof(bitsbase[0]);
        ret = 1 & (bitsbase[int32pos] >> bit32);
    }
    return ret;
}

int setbitvalue(int* bitsbase, int bitssize, int bitindex, int bitvalue) {
    int ret = 0, int32pos = 0, bit32 = 0;

    if (bitindex < bitssize) {
        int32pos = bitindex / bitsizeof(bitsbase[0]);
        bit32 = bitindex % bitsizeof(bitsbase[0]);

        if (bitvalue == 1) {
            bitsbase[int32pos] |= 1 << bit32;
            ret = 1;
        } else if (bitvalue == 0) {
            bitsbase[int32pos] &= ~(1 << bit32);
            ret = 1;
        }
    }

    return ret;
}

int main() {

    int n = 0, val = 0, i = 0, size = 0;

    size = bitsizeof(bits);
    memset(bits, 0, sizeof(bits));

    if (scanf("%d", &n) != EOF) {
        i = 0;

        while (i < n) {
            if (scanf("%d", &val) != EOF) {
                if (getbitvalue(bits, size, val) == 0) {
                    setbitvalue(bits, size, val, 1);
                }
                i++;
            }
        }

        i = 0;

        while (i < size) {
            if (getbitvalue(bits, size, i) == 1) {
                printf("%d\n", i);
            }
            
            i++;
        }
    }

    return 0;
}

全部评论

相关推荐

用微笑面对困难:985只有在应届生里面的优势是断层的在社招或者更远的工作中算是后续能力优先级
工作压力大,你会干什么?
点赞 评论 收藏
分享
今天 01:39
南昌大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务