【备战秋招】每日一题:4月8日美团春招(三批)第一题:题面+题目思路 + C++/python/js/Go/java带注释

news/2025/1/12 3:44:47/

2023大厂笔试模拟练习网站(含题解)

www.codefun2000.com
最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200+道互联网大厂模拟练习题,还在极速更新中。欢迎关注公众号“塔子哥学算法”获取最新消息。
在这里插入图片描述
提交链接:

https://codefun2000.com/p/P1166

为了更好的阅读体检,可以查看OJ上的题解。进入提交链接,点击右边菜单栏的"查看塔子哥的题解"

题目内容

塔子哥所在的班级是一所小学,在教学楼的二楼。教学楼共有三个楼层,一楼是食堂和礼堂,二楼和三楼则是教室。塔子哥的班级坐落在教学楼的正中央,塔子哥班级的座位排成了 n n n 行(行从 1 1 1 n n n 编号),共有 m m m 个大列(大列从 1 1 1 m m m 编号),每个大列中有 a a a 个小列(小列从 1 1 1 a a a 编号),大列与大列之间有一个过道。

班主任规定每周进行一次座位调整,为了使同学们有机会结交不同的同学,每周的座位调整遵循特定的规则,具体规则如下:

  1. 首先所有同学都换到后一行,最后一行的同学换到第一行。即对于坐在第 i < n i\lt n i<n 行的同学,新位置在第 i + 1 i+1 i+1 行,如果 i = n i=n i=n ,那么新位置在第一行;
  2. 然后所有同学都移动到自己右边的那个大列的相同小列上,在最右大列的同学移动到最左大列。即对于坐在第 j < m j\lt m j<m 大列的同学,新位置在第 j + 1 j+1 j+1 大列,如果 j = m j=m j=m ,那么新位置在第一大列;对于坐在第 k k k 小列的同学,新位置仍然在第 k k k 小列。

然而,学校最近购进了新型的学生桌椅,这些桌椅可以调节高度,有些同学把桌子的高度调高了,而有些同学则没有。于是,在座位调整后,如果一位调整过桌子高度的同学坐到了没有调整过桌子高度的同学的位置,他会调整新位置的桌子到他想要的高度;同样地,如果一位没有调整过桌子高度的同学坐到了调整过桌子高度同学的位置,他也会调整新位置的桌子高度,使其恢复原高度。

现在塔子哥的班级要进行换座位了,给出换座位前班级所有桌子的情况,塔子哥想知道,换一次位置后,有多少同学需要重新调整桌子高度。

输入描述

输入第一行包含三个数 n n n m m m a a a ,意义如题目所示。

接下来 n n n 行,每行 m m m 个长度为 a a a 01 01 01 字符串,表示目前塔子哥班上的桌子情况。其中 0 0 0 表示这个位置未调节桌子高度, 1 1 1 表示已调节桌子高度。

对于全部数据, 1 ≤ n , m ≤ 200 , n × m ≥ 2 , 1 ≤ a ≤ 5 1\le n,m \le 200,n \times m\ge2,1\le a \le 5 1n,m200,n×m2,1a5

输出描述

输出一行一个整数,表示换座位后有多少同学需要重新调整桌子高度。

样例

输入

3 3 2
01 10 00
10 00 11
01 00 00

输出

8

思路:暴力模拟

对于每个人,其大行和大列每次增加 1 1 1,假设当前位置为 ( i , j ) (i, j) (i,j),则下一次位置为 ( i + 1 , j + 1 ) (i + 1, j + 1) (i+1,j+1)。小列每次不变,故比较这两个位置中小列不同的即可。

时间复杂度: O ( n m a ) O(nma) O(nma)

类似题目推荐

点评:总体来讲,一道比较简单的签到题。这里主要总结了各个公司2022/23年的类似的不需要脑子的暴力签到题

LeetCode

往届Leetcode周赛/双周赛的第一题

CodeFun2000

1.P1041 华为od-面试真题 2022.10.9-句子的平均重量

2.P1118 阿里巴巴 2023.03.26-第二题-报数字

3.P1174 华为od 2023.04.08–第一题-箱子之形摆放

4.P1175 华为od 2023.04.08–第二题-新学校选址

5.P1246 美团 2023.04.23-春招-第二题-制作骰子

代码

技巧使用

1.循环移位(circular shift)

对于矩阵中的每一个元素,因为需要和右下方的元素进行比较。所以为了避免数组下标越界,使用取模运算来实现循环移位。

2.逻辑等

ans += (s[i][j][k] != s[(i + 1) % n][(j + 1) % m][k])

这样的表达式省去了写if , else 的逻辑。但是工程项目中是否推荐使用,待商榷。

C++

#include <bits/stdc++.h>
using namespace std;int main()
{int n, m, a;cin >> n >> m >> a;vector<vector<string>> s(n, vector<string>(m));for (int i = 0; i < n; ++i)for (int j = 0; j < m; ++j)cin >> s[i][j];int ans = 0;for (int i = 0; i < n; ++i)for (int j = 0; j < m; ++j) {string& s1 = s[i][j];// 取模string& s2 = s[(i + 1) % n][(j + 1) % m];for (int k = 0; k < a; ++k) {ans += (s1[k] != s2[k]);}}cout << ans << "\n";return 0;
}

python

n, m, a = map(int, input().split(" "))
s = [[] for i in range(n)]for i in range(n):s[i] = input().split(" ")ans = 0
for i in range(n):for j in range(m):for k in range(a):# 利用 逻辑表达式 + 取模 简化代码ans += (s[i][j][k] != s[(i + 1) % n][(j + 1) % m][k])print(ans)

Java

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int a = scanner.nextInt();String[][] s = new String[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {s[i][j] = scanner.next();}}int ans = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {for (int k = 0; k < a; k++) {// 利用 逻辑表达式 + 取模 简化代码ans += (s[i][j].charAt(k) != s[(i + 1) % n][(j + 1) % m].charAt(k)) ? 1 : 0;}}}System.out.println(ans);}
}

Go

package main
import ("os""fmt""bufio"
)
func main(){in:=bufio.NewReader(os.Stdin)var n,m,a intfmt.Fscan(in,&n,&m,&a)v:=make([][]string,n+1)for i:=0;i<n;i++{v[i]=make([]string,m+1)for j:=0;j<m;j++{fmt.Fscan(in,&v[i][j])}}ans:=0for i:=0;i<n;i++{for j:=0;j<m;j++{var s,e strings=v[i][j]// 取模技巧e=v[(i+1)%n][(j+1)%m]for k:=0;k<len(s);k++{if s[k]!=e[k]{ans++}}}}fmt.Println(ans)
}

Js

process.stdin.resume();
process.stdin.setEncoding('utf-8');
let input = '';
process.stdin.on('data', (data) => {input += data;return;
});
process.stdin.on('end', () => {const lines = input.trim().split('\n');const [n, m, a] = lines[0].trim().split(' ').map(x => Number(x));const s = new Array(n);for (let i = 0; i < n; ++i) {s[i] = lines[i + 1].trim().split(' ');}let ans = 0;for (let i = 0; i < n; ++i) {for (let j = 0; j < m; ++j) {const s1 = s[i][j];// 取模const s2 = s[(i + 1) % n][(j + 1) % m];for (let k = 0; k < a; ++k) {ans += (s1[k] !== s2[k]);}}}console.log(ans);
});

http://www.ppmy.cn/news/228887.html

相关文章

比较99^100,100^99大小

方法一&#xff1a;设函数—>求导—>积分 方法二&#xff1a;使用二项式定理&#xff08;未总结&#xff09; ### 来自亮仔的搬运工 ###

c语言99乘法表

编写一程序实现以下功能 从键盘输入1&#xff5e;9之间的一个数&#xff0c;根据输入的数&#xff0c;输出对应的下三角乘法口诀表。 #include <stdio.h>int main() {int i, j, n;i 1;j 1;scanf("%d", &n);while(i < n){while(j < i){printf(&qu…

久久一

面向对象与非面向对象之间变量及方法的区分和理解&#xff1a;有人说面向对象的属性可以称为变量&#xff0c;而我认为这种说法一点不严格&#xff01;而且不准确&#xff01;因为面向对象的属性&#xff0c;是类所具备的行为特征&#xff0c;但所以可叫做成员变量&#xff0c;…

99乘法表

99乘法表 实现思路&#xff1a;使用一个循环控制打印9 行&#xff0c;在该循环的循环体中输出该行的内容&#xff0c;一行中输出的个数等于行号&#xff0c;值等于行号和列号的乘积。 package qq;public class qq {public static void main(String[] args) {// TODO Auto-gen…

惠普服务器安装win10系统教程,惠普战99笔记本安装win10系统操作教程

惠普战99不仅注重工作站属性的强化&#xff0c;同时通过搭载英特尔酷睿博锐处理器&#xff0c;使得这款设备能够被拓展到企业级IT部署环境中来&#xff0c;进一步放大了产品的价值&#xff0c;对于普通商务用户、专业领域用户以及企业级用户而言都是很好的选择。那么这款笔记本…

惠普战99 u盘启动BIOS设置教程

转载自&#xff1a;https://www.laomaotao.net/help/2019/0122/6763.html 惠普战99 u盘启动BIOS设置教程 时间&#xff1a;2019-01-23 | 作者&#xff1a;老毛桃官网 惠普战99无论是其配置&#xff0c;还是性能都取得了商务本中较为出色的成绩&#xff0c;并且其外观也是商务…

hp 战99 G1开启显示设置面板

惠普战99 G1开启显示设置面板 需求&#xff1a; 这款机器官方出厂默认鼠标右键找不到 intel显示设置的面板&#xff0c;控制面板里面也找不到。 面板的好处&#xff1a;从面板里面可以调节对比度和亮度&#xff0c;不使用面板&#xff0c;则只能使用快捷键调整屏幕的亮度&…

惠普战99锐龙版 评测

惠普战99锐龙版移动工作站依然保持了惠普这两年的设计语言&#xff0c;凌厉的切角设计&#xff0c;极具科技美感。A面的金属材质配以简约的银色&#xff0c;简洁明了的Logo&#xff0c;没有任何多余的设计&#xff0c;大气高端。 值得一提的是&#xff0c;惠普战99移动工作站还…