4.10字节笔试-后端开发 实习 Java
4道题,2个小时。
1. 第一题
有一个矩阵,矩阵中每个数字代表一块海洋/土地块(数字1代表土地,数字0代表海洋),每1土地仅与上下左右四块其他的土地块/海洋接壤。矩阵边缘以外均视为土地。
涨潮时,与海洋接壤两格或以上的土地块将被淹没为海洋。请返回涨潮后的矩阵。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-- > 0) {
int m = sc.nextInt();
int n = sc.nextInt();
String[] a = new String[m]; // 输入的矩形
StringBuilder[] res = new StringBuilder[m]; // 涨潮后的矩阵
for (int i = 0; i < m; ++i) {
a[i] = sc.next();
res[i] = new StringBuilder(a[i]);
}
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (a[i].charAt(j) == '0') {
continue;
}
int cnt = 0;
if (i > 0 && a[i - 1].charAt(j) == '0') { // 上
++cnt;
}
if (i < m - 1 && a[i + 1].charAt(j) == '0') { // 下
++cnt;
}
if (j > 0 && a[i].charAt(j - 1) == '0') { // 左
++cnt;
}
if (j < n - 1 && a[i].charAt(j + 1) == '0') { // 右
++cnt;
}
if (cnt >= 2) {
res[i].setCharAt(j, '0');
}
}
}
for (int i = 0; i < m; ++i) {
System.out.println(res[i].toString());
}
}
}
} 第二题
题目描述
一个机器人,它每移动一步至少需要消耗一个能量值。例如当小明给它输入5个能量值的时候,它可能会走0步(也就是不动),也可能走1步,但是不会走超过5步。
希望机器人往前走N步,每个位置有不同的能量值,每次消耗了能量值之后可以往前走几步,到达新的位置之后,可以继续消耗当前位置的能量值,继续往前。如果当前位置的能量值为0,那么机器人就无法行动了。
问机器人是否有机会移动到最后一个指令。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
boolean flag = true;
int score;
int mx = 0;
for (int i = 0; i < n; ++i) {
score = sc.nextInt();
if (i <= mx) {
mx = Math.max(mx, i + score);
} else {
flag = false;
}
}
System.out.println(flag ? "TRUE" : "FALSE");
}
} 第三题
字节网球部门有一套特殊的装箱姿势:首先取出N个网球桶和K个网球,给每个网球依次印上编号(1,2,3,...k)。接着按照编号从小到大的顺序依次取出每个网球,对于每个网球,随机找一个网球桶,从任意一个开口塞进去。
波波现在要对一批产品进行质量检测,请帮他判断这箱网球是否严格遵循了上述装箱流程。
字节网球部门有一套特殊的装箱姿势:首先取出N个网球桶和K个网球,给每个网球依次印上编号(1,2,3...k)。接着按照编号从小到大的顺序依次取出每个网球,对于每个网球,随机找一个网球桶,从任意一个开口塞进去。
波波现在要对一批产品进行质量检测,请帮他判断这箱网球是否严格遵循了上述装箱流程。
#include <iostream>
#include <deque>
#include <queue>
#include <vector>
using namespace std;
int main() {
std::ios::sync_with_stdio(false);
int T; cin >> T;
deque<int> dq[11];
while (T--) {
int n; cin >> n; bool ans = true;
for(int i = 0; i < n; ++i) dq[i].clear();
int all_k = 0;
for (int i = 0; i < n; ++i) {
int k; cin >> k; all_k += k;
for (int j = 0; j < k; ++j) {
int x; cin >> x; dq[i].push_back(x);
}
}
for (int i = all_k; i >= 1; --i) {
bool flag = false;
for (int j = 0; j < n; ++j) {
if (dq[j].size() > 0) {
if (dq[j].front() == i) {
dq[j].pop_front(); flag = true;
} else if (dq[j].back() == i) {
dq[j].pop_back(); flag = true;
}
}
}
if (!flag) {
ans = false; break;
}
}
puts(ans ? "1" : "0");
}
} 第四题
-题目描述
某商品在促销时推出了集换活动,集齐全套卡片即可获得神秘大奖,集换活动的规则如下:
1.每次购买都可以获得三张集换卡
2.一套集换卡中包含10种不同的卡片(用0-9标识)
假设你知道每件商品中包含的集换卡,请判断输出集齐整套卡片最少需要购买几件商品?
没有AC,不贴代码了#字节笔试##实习##Java##字节跳动#
