嵌入式软件开发专栏: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信息集散地##嵌入式##提前批##秋招##笔试#