1078. Hashing
发布日期:2021-11-16 18:49:30
浏览次数:7
分类:技术文章
本文共 1589 字,大约阅读时间需要 5 分钟。
Tips:
- 说到此题真是略显辛酸.3月份做这题的时候犯过错,现在又犯了同样的错.务必看清题目啊,题目说的很清楚,用平方探测法处理冲突,怎么就是不长眼呢?
- 素数的计算.也挺久没遇到素数了,突然一下子忘了2是不是素数,然后想当然的认为它不是.以后碰到这种问题得好好思考思考,网上查查,确认之后再写.不然写到后面把前面的问题给忽略了,就会一直找不到错误在哪.
- C/C++的一些基本的原理还是没高清.给数组开辟新空间后如果没释放掉,后面再给它开辟新空间的话,可能会引用旧的地址空间,而且旧的数据也还在.而我继续想当然地认为new之后数组各位都为0.后来尝试过delete[],发现不起作用,于是用笨方法,每位设为0.
- 最后就是注意最后一个输出不要有空格.
- 心好累,慢慢捡起来吧.
#includeint getPrime(int size){ int i,k; if(size < 3) return 2; if(size == 3) return 3; while(true){ k = size / 2; for(i = 2;i <= k;i ++){ if(size % i == 0) break; } if(i > k) return size; ++size; }}int main() { int size,n,num,extra,i,j,k; int *hash,*loc; while(scanf("%d %d",&size,&n) != EOF) { if(n == 0) continue; size = getPrime(size); hash = new int[size]; loc = new int[n]; for(i = 0;i < size;i++) hash[i] = 0; for(i = 0;i < n;i++) loc[i] = 0; for(i = 0;i < n;i++){ scanf("%d",&num); extra = num % size; for(j = extra,k = 0;k < size ;j = (extra + k * k) % size){ if(hash[j] == 0) { loc[i] = j; hash[j] = 1; break; } k++; } if(k >= size ) loc[i] = -1; } printf("%d",loc[0]); for(i = 1;i < n;i++){ if(loc[i] == -1) printf(" -"); else printf(" %d",loc[i]); } printf("\n"); } return 0;}
转载地址:https://blog.csdn.net/Thare_Lam/article/details/49129839 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月02日 23时50分59秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python - selenium 处理 alert
2019-04-27
Java - Set、List、Map
2019-04-27
Java - OnlyLady Spider(HttpClient 4.5 )
2019-04-27
Math - 高斯分布(正态分布)
2019-04-27
android学习笔记----简易音乐播放器原理
2019-04-27
Unity编辑器扩展——标签属性Attribute
2019-04-27
Unity中实现拖拽操作
2019-04-27
Unity中的UGUI事件系统
2019-04-27
C#中的常量
2019-04-27
C#中的静态变量与非静态变量
2019-04-27
C#中的ref、out、params关键字
2019-04-27
C#中的多态性
2019-04-27
C#中的命名空间
2019-04-27
设计模式——状态模式
2019-04-27
设计模式——工厂模式
2019-04-27
Unity中实现有限状态机FSM
2019-04-27
Unity中实现反弹
2019-04-27
U3D游戏开发框架(九)——事件序列
2019-04-27