结论:如果步长step从0~TSize-1进行枚举仍然无法找到正确位置,那么对step大于等于TSize来说也不可能找到位置
注:数组定义时给的大小不能是变量,必须是常量,否则报错:
[Error] F:\PAT\C-Free Standard\temp\未命名7.cpp:22: variable-sized object `hash' may not be initialized
#include<cstdio>
#include<cmath>
bool isprime(int n)
{
if(n<=1) return false;
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++)
{
if(n%i==0) return false;
}
return true;
}
int main()
{
int size,n;
scanf("%d%d",&size,&n);
while(isprime(size)==false)
{
size++;
}
bool hash[100]={0}; ***数组大小不能定义为size
int a;
for(int i=0;i<n;i++)
{
scanf("%d",&a);
int M=a%size;
if(hash[M]==false)
{
hash[M]=true;
if(i==0) printf("%d",M);
else printf(" %d",M);
}else if(hash[M]==true)
{
int step;
for(step=1;step<size;step++) ****
{
M=(a+step*step)%size;
if(hash[M]==false)
{
hash[M]=true;
if(i==0) printf("%d",M);
else printf(" %d",M);
break; ///***
}
}
if(step>=size)
{
if(i>0) printf(" ");
printf("-");
}
}
}
return 0;
}
注:Quadratic probing(with positive increments only)代表正向平方探测法