7-11 整型关键字的散列映射 (25 分)
给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中。用线性探测法解决冲突。
输入格式:
输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。
输出格式:
在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。
输入样例:
4 5
24 15 61 88
输出样例:
4 0 1 3
这道题,你需要考虑,如果有多个重复输入的数据怎么办,解决了这个点,这道题基本上就过了
#include<iostream>
using namespace std;
int pre[2005];
int v[2005];
int main(){
int N,P;
cin>>N>>P;
int x;
for(int i=0;i<N;i++){//必须要有这个判断重复输入的
cin>>x;
bool flag=false;
for(int j=0;j<P;j++){
if(v[j]==x){
flag=true;
cout<<" "<<j;
break;
}
}
if(flag)
continue;
int temp=x%P;
while(pre[temp]==1){
temp=(temp+1)%P;
}
pre[temp]=1;
v[temp]=x;
if(i==0)
cout<<temp;
else
cout<<" "<<temp;
}
return 0;
}