复旦计院、工研院2018机试真题及答案详解

article/2025/4/28 14:27:56

计院

A 求众数

众数就是一个序列中出现次数最多的数字。 如果不唯一,则输出小的那个值。   给定第一个代表有几个数字。  1<=n<=10^5   每个数字在 int 范围内

样例:   
输入,  (第一个代表有几个数字)
8
10 3 8 8 3 2 2 2


输出   2

#include<iostream>
#include<cstring>
#include<map>using namespace std;
map<int,int> a;
int main(){int n;cin >> n;int d[n];for(int i = 0;i < n;i++) cin >> d[i];for(int i = 0;i <  n;i++) {int x = d[i];if(a.find(x) != a.end()) a[x] += 1;else a.insert({x,1});}int max1 = 0,pos; //max1为出现最大次数,pos为出现最多的数字for(auto it = a.begin();it != a.end();it++) //map里按key值有序排列if(it -> second > max1){pos = it -> first;max1 = it -> second;}cout << pos;return 0;
}

学到的知识点

1.遍历map for(auto it = a.begin();it != a.end();it ++)

2.map查找函数,a.find(x),找到时返回该元素迭代器,找不到时返回a.end()。也可用a.count(x) == 0 来判断元素是否存在,

3.map中数据按照key值排序存储。

4.二元组可用{x,y}表示

或者可以先对数组排序(这样可以让相同数字连续出现),再依次统计每个数字出现次数,但不如map简单

B 解一元一次方程

#include<iostream>
#include<cstring>
using namespace std;char eq[256];bool isnox(char c){if(c == 'x') return false;return true;
}bool isnoop(char c){if(c == '+' || c == '-' || c == '=') return false; //=也是运算符return true;
}int main(){cin >> eq;int i = 0;int numl = 0,numr = 0,xl = 0,xr = 0;//处理左边while(eq[i] != '='){    char num_c[256];int k = 0;memset(num_c,NULL,sizeof num_c);bool flag = false; //用于x前无系数默认为1的情况int symbol = 1;if(eq[i] == '-') {symbol = -1;i++;}if(eq[i] == '+') i++;while( isnox(eq[i]) && isnoop(eq[i]) ){num_c[k++] = eq[i++];flag = true;}int num_i = 0;if(flag){for(int q = 0;q < k;q++){   //字符串变为数字intint ch = num_c[q] - '0';num_i = num_i * 10 + ch;}}else num_i = 1;if(eq[i] == 'x'){xl += num_i * symbol;i++;}else numl += num_i *symbol;}//  cout << numl << ' ' << xl << ' ';i++;//处理右边while(eq[i] != NULL){    char num_c[256];int k = 0;memset(num_c,NULL,sizeof num_c);//*****bool flag = false; //用于x前无系数默认为1的情况int symbol = 1;if(eq[i] == '-') {symbol = -1;i++;}if(eq[i] == '+') i++;while( isnox(eq[i]) && isnoop(eq[i]) && eq[i]!= NULL ){num_c[k++] = eq[i++];flag = true;}int num_i = 0;if(flag){for(int q = 0;q < k;q++){   //字符串变为数字intint ch = num_c[q] - '0';num_i = num_i * 10 + ch;}}else num_i = 1;if(eq[i] == 'x'){xr += num_i * symbol;i++;}else numr += num_i *symbol;}
//    cout << numr << ' ' << xr << ' ';int total_x = xl - xr,total_num = numr - numl;if(total_x == 0){if(total_num != 0) cout << "no solution";else cout <<  "infinite solutions";}else cout << "x=" << total_num / total_x;return 0;
}

写的有点长,就嗯模拟吧,比较繁琐的一道题。

C 骨牌

2*n 的地板,用1*2 2*1 的骨牌进行铺地板。问共有多少种情况。  结果对 999983 取余      1<=n<=10000   样例: 6    输出: 13
 

#include<iostream>
using namespace std;int dp[10000];int main(){int n;cin >> n;dp[1] = 1;dp[2] = 2;for(int i = 3;i <= n;i++)dp[i] = (dp[i -1]+ dp[i -2])%999983;cout << dp[n];
}

状态定义:dp[i]表示n为i时有多少种情况 

状态划分:根据最后一块地板选1*2还是2*1划分、

经典DP,注意在求dp[i]时就要取余,否则会溢出int范围。

这种给一个数字求多少种情况的一般都是DP,可以找规律列状态转移方程。

工研院

A 集合交并

输入两个集合,分别求其交集和并集中元素的个数,每个集合中可能存在相同的元素,而最终的交集和并集中应该不存在。

输入描述:

第一行输入两个整数n,m表示两个集合中元素的个数
第二行输入n个整数,表示第一个集合中的元素
第三行输入m个整数,表示第二个集合中的元素

输出描述:

输出两个整数以空格分开,表示其交集和并集中元素的个数

输入样例#:

4 5
3 4 7 3
4 6 3 2 6

输出样例#:

2 5
#include<iostream>
#include<set>
using namespace std;int main(){int n,m;cin >> n >> m;set<int> a,b;for(int i = 0;i < n;i++) {int x;cin >> x;a.insert(x);}for(int i = 0;i < m;i++){int x;cin >> x;b.insert(x);}int num_j = 0,num_b = a.size() + b.size();for(auto x : a){if(b.find(x) != b.end()) num_j++;}num_b -= num_j;cout << num_j << ' ' << num_b;
}

B 约数求和

输入一个数n,输出前n个数的约数的和。

输入描述:

输入一个整数n,1<=n<=1e7

输出描述:

输出一个整数,前n个数的约数的和。

输入输出样例

输入样例:

7

输出样例:

41
#include <cstdio>int main(){int n; long long sum=0;scanf("%d", &n);for (int i=1; i<=n; i++){sum += i*(n/i);}printf("%lld\n", sum);
}


http://chatgpt.dhexx.cn/article/LPRSMN9G.shtml

相关文章

2019年复旦大学机试题

机试&#xff1a; 一、计算机学院&#xff1a; 1、 算法笔记上有类似题&#xff0c;且time与time2都是输入。 而本体time是输入&#xff0c;time2是题目给的。 设置time与time2&#xff0c;为计算方便设定让time恒小于time2。 方法&#xff1a;从time&#xff08;较早的日期…

2019 复旦大学工研院上机题-计算通讯代价

题目&#xff1a; 给出一个树&#xff0c;计算每个节点到其他节点的通讯代价的总和&#xff0c;假如树为 1————2————3 1 则结点 1&#xff0c;2&#xff0c;3 通讯代价分别为&#xff1a;3&#xff0c;2&#xff0c;3 例&#xff1a; 输入&#xff1a; 3 1 2 2 3 输出&…

更正:复旦大学工研院计算机学硕不是第一年招生

首先对大家说一声抱歉&#xff01; 昨天弄错了复旦大学工研院的情况。 据复旦大学工研院的在读同学描述&#xff0c;实际上复旦大学工研院计算机学硕是第二年招生&#xff0c;专硕是第一年招生。 专硕的招生目录&#xff1a; 考试内容&#xff1a;①101思想政治理论;②204英语二…

研究生院校推荐——复旦大学工研院

概述 过去的一年几乎都在准备考研&#xff0c;现在差不多勉强上岸&#xff0c;写一点经验和教训。 我最初的目标院校是上海交大电院计算机&#xff0c;最后上岸是复旦大学工研院计算机。 今年的上交计算机专硕分数线是325&#xff0c;复旦工研院学硕分数线是340&#xff0c;题…

入营人数线性增长,录取人数保持稳定,复旦工研院有点抢手

1、院校介绍 复旦大学工程与应用技术研究院是复旦大学发挥文理医综合优势&#xff0c;聚焦解决国家重大需求的工程与应用研发&#xff0c;发展具有复旦特色工程学科的一项重要举措。其下设有智能机器人研究院、生物医学工程技术研究所和超越照明研究所三个研究机构。近几年来&…

链路聚合实验

目录 1 链路聚合配置实验 1.1 实验内容 1.2 实验原理 1.3 关键命令 1.4 配置过程 2 链路聚合与VLAN配置实验 2.1 实验内容 2.2 实验原理 2.3 配置过程 3 链路聚合与生成树配置实验 3.1 实验内容 3.2 实验原理 3.3 配置过程 4 链路聚合与RSPAN配置实验 4.1 实验…

链路聚合配置

链路聚合 链路聚合介绍 链路聚合模式 链路聚合配置 链路聚合介绍 链路聚合&#xff1a;将多个以太网链路捆绑为一条逻辑的以太网链路 作用&#xff1a; 1.提高带宽 2.节省IP地址 链路聚合组 二层聚合组&#xff1a;随着二层聚合端口的创建自动生成的&#xff0c;只包含二…

为什么会有链路聚合这种技术?

这里写目录标题 前言链路聚合是什么&#xff1f;二层交换机链路聚合三层交换机链路聚合总结 前言 在企业网络中&#xff0c;所有设备的流量在转发到其他网络前都会汇聚到核心层&#xff0c;再由核心区设备转发到其他网络&#xff0c;或者转发到外网。因此&#xff0c;在核心层…

Linux链路聚合

CSDN话题挑战赛第2期https://marketing.csdn.net/p/7b6697fd9dd3795a268d1a6f2fe75012 参赛话题&#xff1a;学习笔记https://activity.csdn.net/creatActivity?id10213 一、概念 指的是将多个物理端口汇聚在一起&#xff0c;形成一个逻辑端口&#xff0c;以实现出、入流量吞…

链路聚合技术及其配置

** 链路聚合技术 &#xff08;链路捆绑&#xff09; ** 链路聚合技术背景 交换机与交换机之间如果流量很大的时候会出现带宽不足的问题。&#xff08;路由器与路由器&#xff09;&#xff08;交换机与服务器之间&#xff09;------------链路聚合技术 &#xff08;链路捆绑&…

eNSP 配置链路聚合

目录 实验目的&#xff1a; 实验拓扑图如下&#xff1a; 实验命令&#xff1a; S1配置 S2配置 S3配置 pc端 &#xff08;所有pc配置IP注意不要相同&#xff09; 实现链路聚合需要满足以下条件&#xff1a; 1. 物理链路的带宽相等&#xff1b; 2. 物理链路连接的设备…

二层链路聚合

目录 一.二层交换机间的链路聚合 二.项目实例 sw配置命令 运行结果 总结&#xff1a; 引言&#xff1a;今天和一个从事网络维护的朋友聊天聊到了二层交换机的链路聚合&#xff0c;感觉自己都快忘记了&#xff0c;于是决定温习一下二层链路聚合的知识。 一.二层交换机间的…

华为交换机 链路聚合

前言 随着网络规模不断扩大&#xff0c;用户对骨干链路的带宽和可靠性提出了越来越高的要求。在传统技术中&#xff0c;常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽&#xff0c;但这种方案需要付出高额的费用&#xff0c;而且不够灵活。 采用链路聚合…

十四、链路聚合

链路聚合 随着网络规模不断扩大&#xff0c;用户对骨干链路的带宽和可靠性提出了越来越高的要求。在传统技术中&#xff0c;常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽&#xff0c;但这种方案需要付出高额的费用&#xff0c;而且不够灵活。 采用链路…

「网工必备」超详细链路聚合原理及分析

大家好&#xff0c;今天带大家了解一下以太网链路聚合&#xff0c; 从它的背景作用到应用范围&#xff0c;再到配置实验&#xff0c;一步搞定&#xff0c;记得看到最后&#xff01; 链路聚合技术的背景和作用 随着网络规模的不断扩大&#xff0c;人们对骨干链路的带宽和可靠性…

链路聚合的介绍以及配置

1、链路聚合技术的背景&#xff1a; 交换机与交换机之间如果流量很大的时候会出现带宽不足的问题。&#xff08;路由器与路由器&#xff09;、&#xff08;交换机与服务器之间&#xff09; 因为当我们在交换机与交换机增加线路时会出现环路&#xff0c;默认情况下CISCO启用了ST…

【博客426】单播 组播 广播

单播 && 组播 && 广播 单播(unicast) 是指封包在计算机网络的传输中&#xff0c;目的地址为单一目标的一种传输方式。 它是现今网络应用最为广泛&#xff0c;通常所使用的网络协议或服务大多采用单播传输&#xff0c;例如一切基于TCP的协议。下面来看看图1。…

组播广播+数据库操作

广播和组播 数据包在以太网物理介质上传播之前必须封装头部和尾部信息。封装后的数据包称为称为数据帧 ,数据帧中封装的信息决定了数据如何传输。 MAC OUI&#xff08;24bit&#xff09; 供应厂商提供&#xff08;24bit&#xff09; 单播详细&#xff1a; 在局域网中,所有主机…

组播数据包丢失故障排除指南

介绍 本文档的目的是帮助找出丢失组播数据包的原因并进行一些调整以尽量减少此类丢失。 组播数据包丢失的原因有多种。 UDP 协议本身牺牲了性能的可靠性&#xff0c;并且不保证数据报的传递。 因此&#xff0c;数据包在网络传输过程中可能会丢失。 即使数据包到达网络节点&…

vlc发送组播数据

vlc既是一个播放器&#xff0c;又可以成为一个流媒体服务器。最近需要做udp组播播放相关的东西&#xff0c;需要先在本地搭建一个udp组播服务器&#xff0c;因为机器上本来就装有vlc&#xff0c;所以就用它了。 第一步&#xff0c;设置一个视频源&#xff0c;点击媒体->流&…