zoukankan      html  css  js  c++  java
  • 散列2 Hashing

    题目:https://pintia.cn/problem-sets/1268384564738605056/problems/1294124786527993857
    题解:https://blog.csdn.net/Invokar/article/details/80372316
    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int GetNextPrime(int x)
    {   /* 若为偶数,找当前数下一个最小的素数 */
        if (x == 1)      // 1不是素数 
            return 2;
        int i, p = x % 2 == 1 ? x : x+1;
        while (1)
        {
            for (i = sqrt(p); i >= 2; i--)
                if (p % i == 0)
                    break;
            if (i == 1)
                break;
            else
                p += 2;
        }   
        return p;
    }
    
    int Hash(int key, int TableSize)
    {   /* 获取映射 */
        return key % TableSize;
    }
    
    int main(int argc, char const *argv[])
    {
        int TableSize, N, x, pos, tempPos;
        scanf("%d %d", &TableSize, &N);
        TableSize = GetNextPrime(TableSize);
        int A[TableSize];
        for (int i = 0; i < TableSize; i++)
            A[i] = 0;
        for (int i = 0; i < N; i++)
        {
            if (i != 0)     /* 规格化输出格式 */
                printf(" ");
            scanf("%d", &x);
            pos = Hash(x, TableSize);
            tempPos = pos;
            if (A[tempPos] == 0)
            {   /* 如果当前下标未被使用 */
                A[tempPos] = x;
                printf("%d", pos);
            }
            else
            {
                int cnt, flag = 0;
                for (cnt = 1; cnt < TableSize; cnt++)
                {
                    pos = Hash(tempPos + cnt*cnt, TableSize);
                    if (A[pos] == 0)
                    {   /* 如果找到不冲突的点 */
                        flag = 1;
                        A[pos] = x;
                        printf("%d", pos);
                        break;
                    }
                }
                if (flag == 0)
                    printf("-");
            }
        }
        return 0;
    }
  • 相关阅读:
    CentOS 用命令访问网页
    ngalian(一)2:安装npm环境
    数仓建设原则探讨
    C#中获取系统时间 LZU
    判断是否是数字类 LZU
    Extjs中ComboBoxTree的实现 LZU
    SQL之学生选课数据库 LZU
    如何看书 LZU
    面向对象思想 LZU
    C#控件命名规范 LZU
  • 原文地址:https://www.cnblogs.com/simon-chou/p/13620142.html
Copyright © 2011-2022 走看看