#include<iostream>
#include<vector>
using namespace std;
vector<int> v,f;
bool prime(int j){
for(int i=2;i*i<=j;i++){//素数生成i*i<=n 等于号不能掉(注意)
if(j%i==0){
return false;
}
}
return true;
}
int main(){
int tsize,n,m,temp1,temp2;
cin>>tsize>>n>>m;//输入没写导致转了两圈后停止(注意)
while(!prime(tsize))tsize++;//tsize 没用起到作用
int pos[tsize]={0},visit[tsize]={0};
/*for(int i=0;i<tsize;i++){
printf("%d ",pos[i]);
}*///一定要把之前debug的痕迹做好记录最后消掉 (注意)
for(int i=0;i<n;i++){
cin>>temp1;
v.push_back(temp1);
}
for(int i=0;i<n;i++){
int j;
for( j=0;j<tsize;j++){
int tempw=(v[i]+j*j)%tsize ;
if(visit[tempw]==0 ){
pos[tempw]=v[i];
visit[tempw]=1;
break;
}
}
if(j==tsize)printf("%d cannot be inserted.\n",v[i]);
}
int ans=0;
for(int i=0;i<m;i++){
cin>>temp1;
for(int j=0;j<=tsize;j++){
temp2=(temp1+j*j)%tsize;
ans++;
if(pos[temp2]==temp1||pos[temp2]==0 ){//找到和没找到,如果遇到0也是没找到,也要停止(注意)
break;
}
}
}
printf("%.1lf",ans*1.0/m);
return 0;
}
总结:
1.素数判定一定不要丢了等于号,自己事先带入样例简单的看看自己的判断条件对不对
2.平方探测法,找到停止,若查找到0时也停止寿命没有这个元素知识性错误
3.debug做好标记,最后不要忘了消掉
4.输入没写导致转了两圈后停止(注意)
英语