7-11 整型关键字的散列映射

7-11 整型关键字的散列映射 (25 分)

给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中。用线性探测法解决冲突。

输入格式:

输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。

输出格式:

在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。

输入样例:

4 5
24 15 61 88

输出样例:

4 0 1 3

坑点:

      如果出现重复的数,则输出第一次的位置

思路:

     采用边判断边输出的方式

代码:

#include<iostream>
#include<cstring>
using namespace std;
int vis[1005];
int is[100005];
int main()
{
	int n,p,num,m;
	cin>>n>>p;
	memset(vis,0,sizeof(vis));
	memset(is,-1,sizeof(is));
	for(int i=0;i<n;i++)
	{
		cin>>num;
		m=num%p;
		if(is[num]!=-1)
		   cout<<is[num];
		else if(!vis[m])
		{
			is[num]=m;
			vis[m]=1;
			cout<<m;
		}
		else
		{
			for(int j=1;j<=p;j++)
			   if(!vis[(num+j)%p])
			    {
			   	   is[num]=(num+j)%p;
				   vis[(num+j)%p]=1;
				   cout<<(num+j)%p;
				   break;
		    	}
		}
	  if(i!=n-1)
	    cout<<" ";
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/daoshen1314/article/details/84960549