当前位置: 首页 > 面试经验 >

OPPO提前批Linux工程师笔试

优质
小牛编辑
86浏览
2023-07-18

OPPO提前批Linux工程师笔试

嵌入式软件开发专栏:https://blog.nowcoder.net/zhuanlan/jvN8gj

校招介绍,嵌入式岗位介绍与推荐,嵌入式学习攻略,嵌软笔试和面试真题汇总,提供个人简历模板,笔试和面试如何准备,c/c++知识点,操作系统知识点,计算机网络知识点,必背八股文相关内容。

软件开发笔试汇总专栏:https://blog.nowcoder.net/zhuanlan/0oDWVm

第一题:构造二阶行列式

小欧希望你构造一个二阶行列式,满足行列式中每个数均为不超过20的正整数,且行列式的值恰好等于x。你能帮帮她吗?

提示:二阶行列式的计算方式:

输入描述

一个正整数x。-1000<=x<=1000

输出描述

如果无解,请输出-1。否则输出任意合法行列式即可(输出两行,每行输出两个不超过20的正整数)。

示例1

输入

2

输出

3 2

5 4

#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;

    for (int a = 1; a <= 20; a++) {
        for (int b = 1; b <= 20; b++) {
            for (int c = 1; c <= 20; c++) {
                for (int d = 1; d <= 20; d++) {
                    if (a * d - b * c == x) {
                        cout << a << " " << b << endl;
                        cout << c << " " << d << endl;
                        return 0;
                    }
                }
            }
        }
    }

    cout << -1 << endl;

    return 0;
}

第二题:挑战boss

小欧正在一个回合制格斗游戏中挑战一个boss。已知游戏的0/3机制如下:

每回合小欧先手攻击boss,然后boss攻击小欧,此时1回合结束。小欧有时可以闪避boss的攻击,当闪避成功时这回合将不受boss的伤害。

小欧攻击boss时可以攒“连击点”,她攻击造成的伤害为a+kb,其中a为基础攻击力,b为基础连击伤害,k为连击次数。小欧每次攻击后会让连击次数加1,但当受到boss的伤害后会重置连击次数为0。

小欧想知道,她最终共对boss造成了多少伤害?

输入描述

第一行输入三个正整数n,a,b,代表回合的数量,小欧基础攻击力,小欧的基础连击伤害。

第二行输入一个长度为n的字符串,字符串仅由o和x组成,其中o代表本回合闪避成功,x代表本回合闪避失败。

1<=n,a,b<=10^5

输出描述

一个正整数,代表小欧造成的伤害总和。

示例1

输入

3 5 2

oxo

输出

17

说明

第一回合攻击,连击次数为0,造成5点伤害。攻击后连击次数变成1。小欧闪避成功。

第二回合攻击,连击次数为1,造成7点伤害。攻击后连击次数变成2。小欧闪避失败,连击次数为0。

第三回合攻击,连击次数为0,造成5点伤害。攻击后连击次数变成1。小欧闪避成功。

总共造成17点伤害。

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

int main() {
    int n, a, b;
    cin >> n >> a >> b;

    string rounds;
    cin >> rounds;

    int cnt = 0, k = 0;
    for (int i = 0; i < n; i++) {
        int pow = a + k * b; 
        cnt += pow;
        if (rounds[i] == 'o') {
            // 闪避 可以连击
            k++;
        }
        else {
            // 收到伤害要重置攻击力
            k = 0;
        }
    }

    cout << cnt << endl;

    return 0;
}

第三题:国际象棋

小欧获得了国际象棋中“象"和”马”的能力,她在一个无穷大的平面直角坐标系中,每一步可以效仿国际象棋中 的”象"和"马"跳一步。

如下图,小红初始坐标为(x,y)时,只跳一步时可以跳到以下

1.(x+k,y+k),k是任意整数。

2.(x+k,y-k),k是任意整数。

3.(x+a,y+b).其中|a|+|6|=3且1<=a,b<=2.

小欧想知道,自己初始坐标为x1,y1,他跳到x2,y2最少需要跳多少步?共有t次询问

输入描述

第一行输入一个整数t(1<=t<=100)表示询问组数

接下来t行,每行四个整数x1,y1,x2,y2

-10^9<=x1,y1,x2,y2<=10

输出描述

一个整数,代表最小的步数。

示例1

输入

4

1 1 2 2

2 2 3 3

2 4 6 5

2 5 8 3

输出

1

1

3

2

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

int main() {
    int T;
    cin >> T;
    while (T-- > 0) {
        int a, b, c, d;
        cin >> a >> b >> c >> d;

        // 计算两个点在x轴和y轴上的差值
        int x = a - c;
        int y = b - d;

        // 如果两点相同,则输出0
        if (x == 0 && y == 0) {
            cout << 0 << endl;
        } 
        // 如果两点在对角线上,或者它们在x轴或y轴上的距离为3,那么可以用一步到达,输出1
        else if (x == y || x == -y || abs(x) + abs(y) == 3) {
            cout << 1 << endl;
        } 
        // 如果两点在x轴和y轴上的距离都是偶数,那么可以用两步到达,输出2
        else if (y % 2 == x % 2) {
            cout << 2 << endl;
        } 
        // 其他情况需要三步,输出3
        else {
            cout << 3 << endl;
        }
    }

    return 0;
}

#OPPO信息集散地##嵌入式##提前批##秋招##笔试#
 类似资料: