c++编程题,电话号码,求和
问答题
问答题1:A,B 两台机器都正常工作, B 机器未监听任何端口.如果 A 机器向 B 机器 80 端口发送SYN包,会收到何种类型的回包?
A: ACK包
B: FIN包
C: 不会收到回包
D: RST包
提示:因为 B 机器 80 端口未打开,所以会发送一个 RST 包,另外请求超时 、提前关闭 、在一个已关闭的 socket 上收到数据也会发送RST 包,RST 是TCP 首部的标志位之一,具体含义是复位连接,也可表示拒绝连接.
问答题2:某学校获取到一个B类地址段,要给大家分开子网使用,鉴于现在上网设备急剧增多,管理员给每个网段进行划分的子网掩码设置为255.255.254.0,考虑每个网段需要有网关设备占用一个地址的情况下,每个网段还有多少可用的主机地址?
提示:由于网关设备占用一个地址,所以可用主机地址数为 29 -2 -1 = 509,其中 2 代表的是主机地址全是0和1的地址,这两个地址不能作为主机地址,全为 0 表示一个网段,全为 1 表示网络广播
问答题3:当我们在局域网内使用ping www.nowcoder.com时,哪种协议没有被使用?
A: ICMP
B: ARP
C: DNS
D: TCP
提示:因为 ping 后面跟的是域名,所以要先将域名转换为 IP 地址,即用到了 DNS 协议,获取到 IP 地址,在数据链路层时根据 MAC 地址传输的,所以要用到 ARP 解析服务,获取 MAC 地址;ping 功能是测试另一台主机是否可达,程序发送一份ICMP回显请求给目标主机,并等待返回ICMP回显应答(ICMP主要是用于 IP 主机、路由器之间传递控制信息,控制信息是指网络通不通,主机是否可达),并没有用到TCP传输协议.
问答题4:某公司申请到一个C类IP地址,但要连接6个的子公司,最大的一个子公司有 26 台计算机,每个子公司在一个网段中,则子网掩码应设为?
提示:最大的子公司有 26 台计算机,可确认主机位数为 25,C 类默认的网络号为24位,27 - 24 = 3 位为子网号,23 = 8,除过全 1 和全 0 的子网号不能用,则可用的子网有 6 个,满足条件,所以子网掩码应设为 255.255.255.224
编程题
编程题1:电话号码

上图是一个电话的九宫格,如你所见一个数字对应一些字母,因此在国外企业喜欢把电话号码设计成与自己公司名字相对应,例如公司的Help Desk 号码是 4357,因为 4 对应 H 、3 对应 E、5 对应 L、7 对应 P,因此 4357 就是 HELP,同理,TUT-GLOP 就代表 888 - 4567、310 - GINO 代表 310 - 4466
NowCoder 刚进入外企,并不习惯这样的命名方式,现在给你一串电话号码列表,请你帮他转换成数字形式的号码,并去除重复的部分
输入描述:输入包含多组数据
每组数据第一行包含一个正整数 n(1≤n≤1024)
紧接着 n 行,每行包含一个电话号码,电话号码仅由连字符“-”、数字和大写字母组成。没有连续出现的连字符,并且排除连字符后长度始终为7(美国电话号码只有7位)
输出描述:对应每一组输入,按照字典顺序输出不重复的标准数字形式电话号码,即 “xxx-xxxx” 形式,每个电话号码占一行,每组数据之后输出一个空行作为间隔符
示例1:
输入
12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279
输出:
310-1010
310-4466
487-3279
888-1200
888-4567
967-1111
案例2:
输入
4
UTT-HELP
TUT-GLOP
310-GINO
000-1213
输出
000-1213
310-4466
888-4357
888-4567
#include
#include
#include
#include
using namespace std;int main(){unordered_map<char, char> dic;//可以用下标插入dic['A'] = '2';// 也可以使用 emplace 函数dic.emplace('B','2');dic.emplace('C','2');dic.emplace('D','3');dic.emplace('E','3');dic.emplace('F','3');dic.emplace('G','4');dic.emplace('H','4');dic.emplace('I','4');dic.emplace('J','5');dic.emplace('K','5');dic.emplace('L','5');dic.emplace('M','6');dic.emplace('N','6');dic.emplace('O','6');dic.emplace('P','7');dic.emplace('Q','7');dic.emplace('R','7');dic.emplace('S','7');dic.emplace('T','8');dic.emplace('U','8');dic.emplace('V','8');dic.emplace('W','9');dic.emplace('X','9');dic.emplace('Y','9');dic.emplace('Z','9');int n;while(cin>>n){set<string>hs;string s;for (int i = 0; i < n; ++i){cin >> s;string p = "";for (auto& c : s){// 是否是数字if (isdigit(c)){p += c;}// 是否是大写字母else if (isupper(c)){p += dic[c];}if (p.size() != 7)continue;// 字符串的分割p = p.substr(0, 3) + "-" + p.substr(3);hs.emplace(p);}}for (auto& phone : hs)cout << phone << endl;cout << endl;}return 0;
}
编程题2:求和
输入两个整数 n 和 m,从数列1,2,3…n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来
输入描述:每个测试输入包含 2 个整数 , n 和 m
输出描述:按每个组合的字典序排列输出,每行输出一种组合
示例:
输入
5 5
输出
1 4
2 3
5
#include
#include
using namespace std;
void help(int n, int m, vector<int>& v, int beg) {//if (beg>n) return;if (m == 0) {for (int i = 0; i<v.size(); i++) {i == 0 ? cout << v[i] : cout << " " << v[i];}cout << endl;}for (int i = beg; i <= n&&i <= m; i++) {v.push_back(i);help(n, m - i, v, i + 1);v.pop_back();}
}
int main() {int n, m;while (cin >> n >> m) {vector<int>v;help(n, m, v, 1);}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
