每日一题 | day35(抄送列表 | 年会抽奖)

选择题

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

正确答案 A:

2、以太网的MAC 协议提供的是( )。
A 无连接不可靠服务
B 无连接可靠服务
C 有连接不可靠服务
D 有连接可靠服务

正确答案 A:

编程题

题目1
每日一题 | day35(抄送列表 | 年会抽奖)_第1张图片
题解思路
1、先将第一行的数据按照名字进行分割出来
场景1:遇到的名字不存在双引号,则将该名字后的第一个逗号之前和名字的起始位置截取到数组中进行保存
场景2:遇到双引号,则肯定存在结束的双引号,此时可以找到第二个双引号,然后将双引号之间的字符串名字保存在数组中
2、检测第二行中的名字是否存在数组中,然后进行输出
代码

// write your code here cpp
#include 
#include 
#include 
#include 
using namespace std;
int main()
{
     
    string nTable, name;
    while (getline(cin, nTable) && getline(cin, name))
    {
     
        unordered_set<string> s;
        int end = 0;
        for (int i = 0; i < nTable.size(); ++i)
        {
     
            if (nTable[i] == '\"')//存在引号
            {
     
                //找第二个双引号
                //必须从i+1开始找,不然end还是i
                end = nTable.find('\"', i + 1);
                string tmp = nTable.substr(i+1, end-i-1);
                s.insert(tmp);
                //更新到下一个名字的前一个位置
                i = end + 1;
            }
            else
            {
     
                end = nTable.find(',', i+1);
                if (end == string::npos)
                {
     
                    //处理最后一个名字
                    s.insert(nTable.substr(i, nTable.size()));
                    break;
                }
                string tmp = nTable.substr(i, end - i);
                s.insert(tmp);
                i = end;
            }
        }
        
        if (s.find(name) == s.end())
            cout << "Important!" << endl;
        else
            cout << "Ignore" <<endl;
    }
    return 0;
}

题目2
每日一题 | day35(抄送列表 | 年会抽奖)_第2张图片
题解思路:错排问题

代码

// write your code here cpp
#include 
#include 
using namespace std;

int main()
{
     
    vector<long long> d = {
     0, 0, 1};
    d.resize(21);
    //所有可能
    vector<long long> f = {
     1, 1, 2};
    f.resize(21);
    for (int i = 3; i <= 20; ++i)
    {
     
        d[i] = (i-1)*(d[i-1] + d[i-2]);
        f[i] = f[i-1] * i;
    }
    
    int n;
    while (cin >> n)
    {
     
        printf("%.2f%%\n", 100.0 * d[n] / f[n]);
    }
}

你可能感兴趣的:(每日一题,字符串)