【笔试真题】


一、复数乘法【哔哩哔哩2020校园招聘】

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;

int StrToInt(string& s)
{
    int num = 0;
    int flag = 1;
    for (int i = 0; i < s.size(); ++i)
    {
        if (s[i] == '-')
            flag = -1;
        else
        {
            if (s[i] <= '9' && s[i] >= '0')
            {
                num = num * 10 + (s[i] - '0');
            }
        }
    }
    return num * flag;
}

int main()
{
    string s1;
    string s2;

    cin >> s1 >> s2;
    string s1First = s1.substr(0, s1.find('+'));
    string s1Second = s1.substr(s1.find('+') + 1);
    string s2First = s2.substr(0, s2.find('+'));
    string s2Second = s2.substr(s2.find('+') + 1);

    int s1F = StrToInt(s1First);
    int s1S = StrToInt(s1Second);
    int s2F = StrToInt(s2First);
    int s2S = StrToInt(s2Second);

    int sum1 = s1F * s2F - s1S * s2S;//整数
    int sum2 = s1F * s2S + s1S * s2F;//复数

    cout << sum1 << "+" << sum2 << "i" << endl;
}

二、一年中的第几天【哔哩哔哩2020校园招聘】

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    cin >> s;
    
    int month_days[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
    int pos1 = s.find('-');
    int pos2 = s.find('-', pos1+1);
    
    int year = stoi(s.substr(0, pos1));
    int month = stoi(s.substr(pos1+1, pos2));
    int day = stoi(s.substr(pos2+1));
    
    int sum = month_days[month-1] + day;
    if((year % 4 == 0 && year % 100 != 0 || year % 400 == 0) && month > 2)
    {
        sum += 1;
    }
    cout << sum << endl;
    return 0;
}

三、k个一组翻转链表【哔哩哔哩2020校园招聘】

在这里插入图片描述

#include <vector>
#include <iostream>
#include <string>
using namespace std;

void reverseV(vector<string>& s, int start, int end)
{
    while(start < end)
    {
        s[start].swap(s[end]);
        start++;
        end--;
    }
}

int main()
{
    vector<string> lv;
    int k = 0;
    string str;
    while((cin >> str) && (str!= "#"))
    {
        lv.push_back(str);
    }
    cin >> k;
    
    int start = 0;
    int count = lv.size() / k;
    while(count--)
    {
        reverseV(lv, start, start + k -1);
        start += k;
    }
    
    for (int i = 0; i < lv.size(); ++i)
    {
        if (i != lv.size() - 1)
            cout << lv[i] << "->";
        else
        {
            cout << lv[i];
        }
    }
    cout << endl;
    return 0;
}

四、递增子序列【瓜子二手车2019秋招】

在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;

bool isAdd(vector<int>& v)
{
    if(v.size() < 3)
    {
        return false;
    }
    
    int first = v[0];
    int second = INT32_MAX;
    for(int i = 1; i < v.size(); ++i)
    {
        if(v[i] < first)
        {
            first = v[i];
            second = INT32_MAX;
        }
        else if(first < v[i] && v[i] < second) 
        {
            second = v[i];
        }
        else if(v[i] > second)
        {
            return true;
        }
    }
    return false;
}

int main()
{
    int n = 0;
    cin >> n;
    vector<int> v;
    v.resize(n);
    
    for(auto& e : v)
    {
        cin >> e;
    }
    
    if(true == isAdd(v))
    {
        cout << "true" << endl;
    }
    else
    {
        cout << "false" << endl;
    }
    return 0;
}

五、硬币划分【瓜子二手车2019秋招】

在这里插入图片描述

在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;

int Sum(vector<int>& coins, int n)
{
    int row = coins.size();
    vector<vector<int>> v(row + 1, vector<int>(n + 1, 0));
    for (int i = 0; i <= row; ++i)
    {
        v[i][0] = 1;
    }

    for (int i = 1; i <= row; ++i)
    {
        for (int j = 1; j <= n; ++j)
        {
        	//当前硬币面值小于n
            if (coins[i - 1] > j)
            {
                v[i][j] = v[i - 1][j];
            }
            else
            {
                v[i][j] = (v[i - 1][j] + v[i][j - coins[i - 1]]) % 1000000007;
            }
        }
    }
    return v[coins.size()][n];
}

int main()
{
    int n = 0;
    cin >> n;
    vector<int> coins{ 1, 2, 5, 10 };
    cout << Sum(coins, n) << endl;
    return 0;
}

六、求表达式 f(n)结果末尾0的个数【小红书2019年校园招聘】

在这里插入图片描述

#include <iostream>
using namespace std;

int CalNumber(int n, int key)
{
    int cnt = 0;
    while(n % key == 0)
    {
        ++cnt;
        n /= key;
    }
    return cnt;
}

int main()
{
    int n = 0;
    cin >> n;
    int count2 = 0;
    int count5 = 0;
    
    // 查找包含5和2的个数
    for (int i = 1; i <= n; ++i)
    {
        // 整个式子中包含的数字i共有:n + 1 - i个
        count2 += CalNumber(i, 2) * (n - i + 1);
        count5 += CalNumber(i, 5) * (n - i + 1);
    }
    //取出最小值
    cout << min(count2, count5) << endl;
    return 0;
}

七、字符串压缩算法【小红书2019年校园招聘】

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    getline(cin, s);
    
    int cnt = 0;
    for (int i = 0; i < s.size(); ++i)
    {
        
        while(i < s.size() - 1&& s[i] == s[i + 1])
        {
            ++cnt;
            ++i;
        }

        if(cnt != 0)
        {
            cout << cnt;
            cnt = 0;
        }
        cout << s[i];
    }
    return 0;
}
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小唐学渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值