while(!isPrime(MSize))
写成了
if(!isPrime(MSize))
找了我一个小时。。
#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
int hashTable[10010];
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 MSize,n,m;
scanf("%d%d%d",&MSize,&n,&m);
fill(hashTable,hashTable + 10010,0);
while(!isPrime(MSize))
MSize++;
// 调整好散列表的大小
for(int i = 0;i < n;i++){
int num;
scanf("%d",&num);
bool success = false;
for(int j = 0;j < MSize && success == false;j++){
int pos = (num + j * j) % MSize;
if(hashTable[pos] == 0){
hashTable[pos] = num;
success = true;
}
}
if(success == false)
printf("%d cannot be inserted.\n",num);
}
int cnt = 0;
for(int i = 0;i < m;i++){
int k;
scanf("%d",&k);
for(int j = 0;j <= MSize;j++){
cnt++;
int pos = (k + j * j) % MSize;
if(hashTable[pos] == k || hashTable[pos] == 0){
break;
}
}
}
double res = (double)cnt / m;
printf("%.1lf\n",res);
system("pause");
return 0;
}