题目如下:
大概题目意思就是创建两个哈希表,创建规则由f(x)函数决定,如果冲突了,解决方法就是把数据按照隔壁哈希表f(x)的规则放进去,代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int check(int T1[],int T2[],int num,int n1,int n2)
{
int x,y=num,z;
while(1)
{
if(T1[y%n1]!=-1)
{
x=T1[y%n1];
if(T2[x%n2]!=-1)
{
z=T2[x%n2];
T2[x%n2]=T1[y%n1];
T1[y%n1]=y;
y=z;
}
else
{
T2[x%n2]=T1[y%n1];
T1[y%n1]=y;
return 1;
}
}
else
{
T1[y%n1]=y;
return 1;
}
}
return 0;
}
void is_not_empty(int turn,int T[],int n)
{
int i;
int count=0;
for(i=0;i<n;i++)
{
if((T[i]!=-1)&&count==0)
{
printf("Table %d\n",turn);
printf("%d:%d\n",i,T[i]);
count++;
}
else if(T[i]!=-1)
{
printf("%d:%d\n",i,T[i]);
count++;
}
}
}
int main()
{
int n1,n2;
int m;
int num;
int T1[1001];
int T2[1001];
int count=0;
int turn;
while(1)
{
count++;
turn=1;
scanf("%d%d%d",&n1,&n2,&m);
if((n1==n2)&&(m==n2)&&(m==0))
{
break;
}
memset(T1,-1,sizeof(T1));
memset(T2,-1,sizeof(T2));
while(m--)
{
scanf("%d",&num);
check(T1,T2,num,n1,n2);
}
printf("Case %d:\n",count);
is_not_empty(turn,T1,n1);
turn++;
is_not_empty(turn,T2,n2);
}
return 0;
}