11-散列1 电话聊天狂人 (25 分) (C语言)
浙大版《C语言程序设计实验与习题指导(第3版)》题目集
- 11-散列1 电话聊天狂人 (25 分)
- 二、题解
- c代码
11-散列1 电话聊天狂人 (25 分)
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。
输入格式:
输入首先给出正整数N(≤105)N ( ≤10^5 )N(≤105),为通话记录条数。随后NNN行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。
输出格式:
在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。
输入样例1:
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
输出样例1:
13588625832 3
二、题解
c代码
#include <stdio.h>
#define N 200010 //数组开大一点
#define mod 200003 //比最大数据量大的最小的素数
typedef long long ll; //电话号码用long long可以存的下struct hash { //哈希表ll tel; //存电话号码 int cnt; //统计号码出现几次
}num[N];int n;void Insert(ll a) { //哈希表插入函数,用的是线性探测int temp, flag;if(!num[a % mod].cnt) { //当前位置没有被占用,直接用num[a % mod].cnt++;num[a % mod].tel = a;} else if(num[a % mod].cnt && num[a % mod].tel == a) { //占了,看看是不是和当前号码一样num[a % mod].cnt++; //一样次数加加} else if(num[a % mod].cnt && num[a % mod].tel != a) { //占了,和当前号码不一样flag = 1; //标志号码是否出现过temp = a % mod; while(num[temp].cnt) { //找空位,或者看看后面是不是有这个号码if(num[temp].tel == a) { //出现过,次数加加flag = 0; //标志出现过num[temp].cnt++; break;}temp = (temp + 1) % mod; //找下一个位置,取模,防止最大N时,加过头了,超出数组大小}if(flag) { //没找到,找到了空位,把元素填进去num[temp].cnt++;num[temp].tel = a;}}
}int main() {scanf("%d", &n);ll a, b, cnt = 0;while(n--) {scanf("%lld%lld", &a, &b); Insert(a); //插入电话号码Insert(b); }int ans = 0; //记录出现最多次电话号码的次数ll tel = 1e13; //记录出现最多次的最小的电话号码,先置成一个比较大的数for (int i = 0; i <= mod; i++) {if(num[i].cnt && num[i].cnt > ans) { //当前号码出现次数比记录的大ans = num[i].cnt; tel = num[i].tel;} else if(num[i].cnt && num[i].cnt == ans) { //当前号码出现次数等于记录的if(num[i].tel < tel) //比较电话号码大小,换成小的tel = num[i].tel;}}int max = 0;for (int i = 0; i <= mod; i++) //统计最大次数并列的数量if(num[i].cnt == ans) max++;if(max > 1)printf("%lld %d %d\n", tel, ans, max); elseprintf("%lld %d\n", tel, ans);return 0;
}
11-散列1 电话聊天狂人 (25 分) (C语言)相关推荐
- 11-散列1 电话聊天狂人 (25 分)
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这里只列出拨出方和接收方的11位数字构成的 ...
- 11-散列1 电话聊天狂人 (25分)
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 ^5),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这里只列出拨出方和接收方的11位 ...
- 7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析
7-14 电话聊天狂人 (25 分)map做法 1:题目 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 5 ),为通话记录条数.随后N行 ...
- 7-3 电话聊天狂人 (25 分)
暑假字符串专题HBU程序设计训练营总结 ?点这里 7-3 电话聊天狂人 (25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105),为 ...
- 7-1 电话聊天狂人 (25分) PTA 数据结构
7-1 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 5 ),为通话记录条数.随后N行,每行给出一条通话记录. ...
- 5-14 电话聊天狂人 (25分)/PTA
5-14 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数NN(\le 10^5≤105),为通话记录条数.随后NN行,每 ...
- 5-14 电话聊天狂人 (25分)
5-14 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105≤ 10^5),为通话记录条数.随后N行,每行给出一条通话 ...
- 算法 散列1 电话聊天狂人
全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案 题目:给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105), ...
- 电话聊天狂人 (25 分)【简便解法】
立志用最少的代码做最高效的表达 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10^5),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这 ...
最新文章
- cookies池和proxy池
- python 报错 AttributeError: type object ‘datetime.datetime‘ has no attribute ‘datetime‘
- 080929 气温骤降
- priority_queue优先队列的用法总结
- JVM笔记(JVM内存+垃圾回收器)详解
- mysql typeindex_explain mysql的type字段,索引的类型
- 用户思维模型,围绕用户核心四大模块,拉新、养熟、成交、裂变循环的效果...
- linux远程windows执行cmd,Linux服务器远程连接window服务器并执行cmd命令
- C/C++ select fd_set解释
- php 日期format不要零_PHP格式化日期用法代码,包括前导零示例
- Python加权图的邻接表邻接矩阵之转换
- 如何使用iMazing为iPad创建配置文件
- TransE代码实践(很详细)
- Android 最常用的设计模式六 安卓源码分析—责任链模式
- 【26】Superscalar和VLIW:如何让CPU的吞吐率超过1?
- Vant_根据已有地址获取code
- 2010提升你幽默感的经典短句!
- Tromino谜题java_Tromino谜题
- 用python爬取考研词汇及其近反义词与例句
- 网易云音乐移动端项目实战(分解下)