69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
#define N 50
#define P1 47
#define LEN 20
char tbl[N][LEN];
int H1(char *key)
{
long k,d=0;
int c;
while(*key)
d=d+*key++;
k=d;
k=((k*k)%10000-(k*k)%100)/100;
return k%P1;
}
/*int H1(char *key)
{
int temp[10];
long k,d=0,e;
int c,f,g;
while(*key)
d=d+*key++;
d=d*d;
e=d;
for(c=0;e!=0;c++)
{
e=e/10;
}
g=c;
for(f=c;f>=0;f--)
{
temp[--g]=d%10;
d/=10;
}
k=temp[c/2]*10+temp[c/2+1];
return k%P1;
}*/
int Search(char *key_word )
{
int pos,c=5;
pos=H1(key_word);
if (strcmp(tbl[pos],key_word)==0)
return pos;
while(tbl[pos][0]!='\0'&& strcmp(tbl[pos],key_word) )
pos=(pos+c)%N;
if(tbl[pos][0]=='\0')
return -1;
else return pos;
}
char *k_word[]={"Wangdepeng","caozuan","zhangji","baiyi","wangwang","xiaohun","xiaojun","wangan","lida","nijiang",
"Wanghao","wangxiaoha","lijian","neicun","chenghao","lixiaoyang","lihui","lidada","wangxiaoxiao","caomimi",
"Nidada","woshishui","pengpeng","xiaoyiyi","depeng","fadiande","zhuguanjun","baoshanwei","baowei","kouwei"};
void main()
{
int count[N],i,pos,c,n;
char k_name[LEN];
char m;
for(i=0;i<N;i++)
{
count[i]=0;
tbl[i][0]='\0';
}
n=sizeof(k_word)/sizeof(k_word[i]);
for(i=0;i<n;i++)
{
pos=H1(k_word[i]);
c=5;
while(tbl[pos][0]!='\0'&&strcmp(tbl[pos],k_word[i]))
{
count[pos]++;
pos=(pos+c)%N;
}
strcpy(tbl[pos],k_word[i]);
}
for(i=c=0;i<N;i++)
if(tbl[i][0]!='\0')
printf("%10s%c",tbl[i],++c%5==0? '\n':'\t');
printf("\n\n");
for(i=c=0;i<N;i++)
if(tbl[i][0]!='\0')
printf("%4d%c",count[i],++c%5==0? '\n':'\t');
printf("\n\n");
for(i=c=0;i<N;i++)
if(tbl[i][0]!='\0')
c+=count[i]+1;
printf("ASL=%.2f\n\n",(float)c/n);
printf("Please input a keyword:");
for(;;)
{
gets(k_name);
pos=Search(k_name);
if(pos!=-1) printf(" found at %d\n",pos);
else printf("not found ! \n");
}
m=getchar();
}