剪花布条,客似云来

蔚落 2023-07-03 07:11 94阅读 0赞

问答题

问答题1:某浏览器发出的HTTP 请求报文如下:

在这里插入图片描述
下列叙述中,错误的是?

提示:Connection: 连接方式 Close 表明为非持续连接方式, keep-alive 表示持续连接方式;Cookie 值是由服务器产生的, HTTP 请求报文中有 Cookie 报头表示曾经访问过www.test.edu.cn服务器

问答题2:主机甲与主机乙之间已建立一个TCP 连接,双方持续有数据传输,且数据无差错与丢失。若甲收到 1 个来自乙的 TCP 段,该段的序号为 1913、确认序号为 2046、有效载荷为 100 字节,则甲立即发送给乙的 TCP 段的序号和确认序号分别是?

A: 2046、 2012
B: 2046、 2013
C: 2047、 2012
D: 2047、 2013

提示:甲在发送数据之前,明确两个信息

(1) 段序号为 1913,说明 乙 发给 甲 的数据段起始字节序号为 1913,有效载荷长度为 100,说明该数据段的长度为 100,那么甲下次需要的数据段的序号就是 1913 + 100 = 2013;

(2) 乙 发给 甲 的确认序号为 2046,说明 乙 这次需要 甲 发送的数据段的起始字节序号为 2046。获取这两个信息后,甲 即可确定要发给 乙 的序号为 2046(从乙的确认序号获知),确认序号为 2013(希望下次乙能够发送首字节序号 2013 的数据段过来)

问答题3:主机甲和乙已建立了TCP连接,甲始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为10KB的确认段。若甲在t时刻发生超时时拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是?

A: 10KB
B: 12KB
C: 14KB
D: 15KB

提示:当t时刻发生超时时,把ssthresh设为8的一半,即为4,且拥塞窗口设为1KB。然后经历10个RTT后,拥塞窗口的大小依次为2、4、5、6、7、8、9、10、11、12,而发送窗口取当时的拥塞窗口和接收窗口的最小值,而接收窗口始终为10KB,所以此时的发送窗口为10KB,实际上该题接收窗口一直为10KB,可知不管何时,发送窗口一定小于等于10KB,选项中只有A选项满足条件

编程题4主机甲和主机乙之间建立一个TCP连接,TCP最大段长度为1000字节,若主机甲的当前拥塞窗口为4000字节,在主机甲向主机乙连续发送 两 个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的 接收 窗口大小为2000字节,则此时主机甲还可以向主机乙发送的最大字节数是?

A: 1000
B: 2000
C: 3000
D: 4000

提示:第一个段的确认段中通告的接收窗口大小为2000字节,即表明在接受到第一个报文段后,还有2000字节的缓存空间可用。 由于发送方发送了二个报文段,第二个段将占用剩下的2000字节中的1000字节,即一共还有(2000-1000=1000)字节,因而 此时主机甲还可以向主机乙发送的最大字节数是1000字节

编程题

编程题1:剪花布条

一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?

输入描述:输入包含多组数据,每组数据包含两个字符串s,t,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长

输出描述:对应每组输入,输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就输出0,每个结果占一行

示例
输入
abcde a3
aaaaaa aa
输出
0
3

提示:求在S串中,T串整体出现了多少次,利用 find 函数,首先从 pos 位置开始找,如果找到后,就跳过小饰条的长度再次找,直到找不到为止.

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main(){
  5. string s,t;
  6. while(cin>>s>>t){
  7. int res = 0;
  8. size_t pos = 0;
  9. while((pos = s.find(t,pos))!=string::npos){
  10. pos+=t.size();
  11. ++res;
  12. }
  13. cout<<res<<endl;
  14. }
  15. return 0;
  16. }

编程题2:客似云来

NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……

现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)

输入描述:测试数据包括多组,每组数据包含两个整数from和to(1≤from≤to≤80),分别代表开店的第from天和第to天

输出描述:对应每一组输入,输出从from到to这些天里(包含from和to两天),需要做多少份早餐

方法一:可以利用斐波那契数列求出前80项的和,利用跌加的方式计算出 from 到 to 的和

方法二 :可以利用一个公式 Sn = Fn+2 − 1

具体推导如下:通过特征方式计算出斐波那契数列的通项,然后利用等比数列的公式可推导出来

  1. #include <iostream>
  2. #define MAX 83 //如果用公式计算,需要接下来两项的值
  3. void solve(long long num[]){
  4. for (int i = 2; i < MAX; i++){
  5. num[i] = num[i - 1] + num[i - 2];
  6. }
  7. }
  8. //解法1:用遍历求和求解
  9. long long sum_traversal(long long num[], int from, int to){
  10. long long ans = 0;
  11. //让数组下标从from - 1遍历到to - 1
  12. for (int i = from - 1; i < to; i++){
  13. ans += num[i];
  14. }
  15. return ans;
  16. }
  17. //解法2:用公式求解
  18. long long sum_formula(long long num[], int from, int to) {
  19. return num[to + 1] - num[from];
  20. //第to + 2项的下标是to + 1,
  21. //第from + 2 - 1项的下标是from
  22. }
  23. int main(){
  24. int from, to;
  25. long long num[MAX] = { 1, 1};
  26. //提前计算Fibonacci数列
  27. solve(num);
  28. while (std::cin >> from >> to){
  29. cout << sum_formula(num, from, to) << endl;
  30. }
  31. return 0;
  32. }

发表评论

表情:
评论列表 (有 0 条评论,94人围观)

还没有评论,来说两句吧...

相关阅读