设散列表a[18],散列函数是hask(k)=k%17,用开放地址法解决冲突hi=(h0+di)%m。冲突时,使用增量序列di=5i。计算输入序列(值>=0)对应的散列地址值。(输入个数不会超过15个)
输入格式:
第一行为输入个数;
第二行为对应的输入值,用空格隔开。
输出格式:
每行对应一个值及其散列地址,中间用空格隔开(即pos前后均有一个空格)
输入样例:
5
141 73 95 112 56
结尾无空行
输出样例:
141 pos: 5
73 pos: 10
95 pos: 15
112 pos: 2
56 pos: 7
结尾无空行
#include<stdio.h>
int a[18];
int main()
{
int N,p;
scanf("%d",&N);
for(int i = 0;i<N;i++){
scanf("%d",&p);
int x = p%17;
if(!a[x]){
a[x] = p;
printf("%d pos: %d\n",p,x);
}
else{
while(a[x]){
x = (x+5)%18;
}
if(!a[x]){
a[x] = p;
}
printf("%d pos: %d\n",p,x);
}
}
return 0;
}