给定一系列整型关键字和素数P,用除留余数法定义的散列函数H(Key)=Key将关键字映射到长度为P的散列表中。用线性探测法解决冲突。
输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。
在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。
4 5 24 15 61 88结尾无空行
4 0 1 3结尾无空行 答案:
#include<stdio.h> int hash[1050],n; int find(int x){ int k=x%n; while(hash[k]!=0&&hash[k]!=x){ k++; if(k==n){ k=0; } } return k; } int main(){ int m; scanf("%d%d",&m,&n); for(int i=0;i<m;i++){ int x; scanf("%d",&x); int p=find(x); hash[p]=x; if(i) putchar(32); printf("%d",p); } return 0; }