美团2024届秋招笔试第一场编程真题(js版本)

1.小美的外卖订单

        简单的加法逻辑,需要注意的是各个数据的边界问题

  1. 折扣价不能超过原价
  2. 减的价格不能超过满的价格
  3. 满减优惠仅限原价购入
const rl = require("readline").createInterface({ input: process.stdin });
void (async function () {let count = 0;let list = [];let man = 0,jian = 0;rl.on("line", function (line) {if (count === 0) {count = parseInt(line);} else if (list.length < count) {const item = line.split(" ");list.push([parseFloat(item[0]), parseFloat(item[1])]);} else {const item = line.split(" ");man = parseFloat(item[0]);jian = parseFloat(item[1]);console.log(getPrices(list, man, jian));}});
})();function getPrices(list, man, jian) {if(jian > man || man <= 0 || jian <= 0) return 'error'let prices1 = 0,prices2 = 0;for (let i = 0; i < list.length; i++) {if (list[i][1] > list[i][0] || list[i][1] <= 0 || list[i][0] <= 0) return "error";prices1 += list[i][0];prices2 += list[i][1];}if (prices1 >= man) {prices1 -= jian;}return prices1 > prices2 ? prices2.toFixed(2) : prices1.toFixed(2);
}

2.小美的字符串匹配度

  1. 第一步计算s和t中不操作的匹配度,也就是s[i] === t[i] 的个数
  2. 第二步,计算对t操作一次能增加的匹配的
const rl = require("readline").createInterface({ input: process.stdin });void async function () {let length = 0;let s = '',t = '';// Write your code hererl.on('line',function(line){if(length === 0) {length = parseInt(line)} else if(s === '') {s = line;} else {t = line;console.log(computed(s,t))}})
}()
function computed(s, t) {//计算原本的匹配度let baseCount = 0;//记录无需交换操作的下标let used = new Array(s.length).fill(false);for (let i = 0; i < s.length; i++) {if (s[i] == t[i]) {used[i] = true;baseCount++;}}//计算操作一次增加的匹配度  1 or 2let changeCount = 0;for (let i = 1; i < t.length; i++) {//原本就匹配的,无需交换if (used[i]) continue;for (let j = i + 1; j < s.length; j++) {//原本就匹配的,无需交换if (used[j]) continue;// 满足交换后一个相等 继续执行// 满足两个相等,直接返回,操作一次最多怎加两个pipeiduif (t[i] === s[j]) {changeCount = 1;if (t[j] === s[i]) {return baseCount + 2;}}}}return baseCount + changeCount;
}

3.小美的树上染色

贪心算法: 最优解就是从每条路径的叶子节点开始染红

const rl = require("readline").createInterface({ input: process.stdin });
let nodeValue = [];
let edgeMap = new Map()
void async function () {let start = 0;let nodeCount = 0;rl.on('line',function(line) {if(nodeCount === 0) {nodeCount = parseInt(line);} else if(nodeValue.length === 0) {nodeValue = line.split(' ').map(_ => parseInt(_))} else {start++;const item = line.split(' ')edgeMap.set(item[0],[...(edgeMap.get(item[0]) || []),item[1]])if(start == nodeCount - 1) {let hasVisited = []dfs('1',hasVisited);console.log(hasVisited.length)}}})
}()function dfs(u,hasVisited) {//循环可到达if(edgeMap.has(u)) {for(let x of edgeMap.get(u)) {dfs(x,hasVisited);//遍历到每条线的末尾,叶子节点if(Math.sqrt(nodeValue[x-1] * nodeValue[u - 1]) % 1 === 0 && !hasVisited.includes(x) && !hasVisited.includes(u)) {hasVisited.push(x);hasVisited.push(u);}}}
}

4.小美的排列询问

简单无脑过: 找到x的位置,如果在x前后找到y就是yes

const rl = require("readline").createInterface({ input: process.stdin });void (async function () {let nodeCount = 0;let list = [];let x = null,y = null;rl.on("line", function (line) {if (nodeCount === 0) {nodeCount = parseInt(line);} else if (list.length === 0) {list = line.split(" ");} else {[x, y] = line.split(" ");let flag = "No";for (let i = 0; i < nodeCount - 1; i++) {if ((list[i] == x && list[i + 1] == y) ||(list[i] == y && list[i + 1] == x)) {flag = "Yes";break;}}console.log(flag);}});
})();

5.小美的排列构造

要让相邻两项的和的差值最小,排列需要满足第一大挨着第一小,第二大挨着第二小。例如n=6,满足要求的排列可以是[6,1,5,2,4,3],也可以是[1,6,2,5,3,4],权值都是0

题外话: n为偶数,权值为0,n为奇数,权值为 Math.ceil(n / 2)

const rl = require("readline").createInterface({ input: process.stdin });void (async function () {let count = 0;rl.on("line", function (line) {if (count === 0) {count = parseInt(line);let list = "";let i = 1,j = count;while (i < j) {list = list + i + " " + j + " ";j--;i++;}if (count % 2 === 1) {list += j;}console.log(list.trimEnd());}});
})();

6.小美走公路

公路是环形的,可以顺时针走,也可以逆时针走,要求最短距离。

设x到y的直线距离是distanceA,从任意点顺时针走一圈的距离是distanceB, distanceB-distanceA代表x到y的绕圈距离,答案就是distanceA和distanceB-distanceA的最小值

const rl = require("readline").createInterface({ input: process.stdin });void (async function () {let stationCount = 0;let distance = [];let start = 0,end = 0;rl.on("line", function (line) {if (stationCount === 0) {stationCount = parseInt(line);} else if (distance.length === 0) {distance = line.split(" ").map((_) => parseInt(_));} else {[start, end] = line.split(" ").map((_) => parseInt(_));console.log(getDistance(distance, start, end));}});
})();function getDistance(distance, start, end) {//跑一圈 a点到a点const oneCircle = distance.reduce((total, cur) => total + cur, 0);//记录距离let total = 0;if (start > end) {//直线距离[start, end] = [end, start];}for (let i = start; i < end; i++) {total += distance[i - 1];}//直线距离 ? 还是绕一圈 ?return Math.min(total, oneCircle - total);
}

7.小美的好矩阵

直接遍历矩阵,然后判定

const rl = require("readline").createInterface({ input: process.stdin });void (async function () {let n = 0,m = 0;let matrix = [];rl.on("line", function (line) {if (n == 0) {const item = line.split(" ");n = parseInt(item[0]);m = parseInt(item[1]);} else {matrix.push(line.split(""));if (matrix.length === n) {console.log(getButyNum(matrix, n, m));}}});
})();
function getButyNum(matrix, n, m) {let count = 0;if (n < 3 || m < 3) return count;for (let i = 0; i <= n - 3; i++) {for (let j = 0; j <= m - 3; j++) {if (isButy(matrix, i, j)) {count++;}}}return count;
}
function isButy(matrix, p, q) {let a = false,b = false,c = false;for (let i = p; i < p + 3; i++) {for (let j = q; j < q + 3; j++) {if (matrix[i][j] === "A") {a = true;} else if (matrix[i][j] === "B") {b = true;} else if (matrix[i][j] === "C") {c = true;} else {return false;}if (i - 1 >= p && matrix[i][j] === matrix[i - 1][j]) {return false;}if (i + 1 < p + 3 && matrix[i][j] === matrix[i + 1][j]) {return false;}if (j - 1 >= q && matrix[i][j] === matrix[i][j - 1]) {return false;}if (j + 1 < q + 3 && matrix[i][j] === matrix[i][j + 1]) {return false;}}}return a && b && c;
}

8.小美的蛋糕切割

由于不能把某个小正方形切成两个区域,所有的切法就是n-1种沿着行切开和m-1种沿着列切开,分别计算n+m-2种美味度的差值,取最小值

const rl = require("readline").createInterface({ input: process.stdin });void async function () {let n = 0,m = 0;let matrix = [];rl.on('line',function(line) {if(n == 0) {const item = line.split(" ")n = parseInt(item[0])m = parseInt(item[1])} else {matrix.push(line.split(" "));if(matrix.length === n) {console.log(getMiniDiff(matrix, n, m));}}})
}()
function getMiniDiff(matrix, n, m) {//分别计算每行每列美味值,以及整个蛋糕的美味值let rows = new Array(n).fill(0);let columns = new Array(m).fill(0);let total = 0;for(let i=0;i<n;i++) {for(let j=0;j<m;j++) {const value = parseInt( matrix[i][j])rows[i] += valuecolumns[j] += valuetotal += value}}let diff = total;//查询按照行切割,美味差值let sum = 0;for(let i=0;i<rows.length;i++) {sum += rows[i];diff = Math.min(diff,Math.abs(2*sum - total))}//查询按照列切割,美味差值sum = 0;for(let j=0;j<columns.length;j++) {sum+=columns[j];diff = Math.min(diff,Math.abs(2*sum - total))}//return diff
}

9.小美的字符串变换

先暴力算出满足要求的矩阵的x,y组合,再挨个计算出每种矩阵的连通块数量(深度遍历dfs),取最小值

const rl = require("readline").createInterface({ input: process.stdin });void (async function () {let count = 0;rl.on("line", function (line) {if (count === 0) {count = parseInt(line);} else {console.log(getBlocks(count, line));}});
})();
function getBlocks(count, str) {//计算可能x y组合let group = [];for (let i = 1; i <= count; i++) {for (let j = 1; j <= count; j++) {if (i * j == count) {group.push([i, j]);}}}//分别计算矩阵let result = str.length;for (let k = 0; k < group.length; k++) {const x = group[k][0];const y = group[k][1];let temp = 0;//记录当前矩阵连通块数量let list = str.split("");for (let i = 0; i < x; i++) {for (let j = 0; j < y; j++) {if (list[i * y + j] !== "0") {temp++;dfs(x, y, list, i, j, list[i * y + j]);}}}result = Math.min(result, temp);}return result;
}
function dfs(x, y, list, i, j, flag) {//判定i,j合法性if (!(i >= 0 && i < x && j >= 0 && j < y)) {return;}//不和参考相等就退出if (list[i * y + j] != flag) {return;}//当前重置为0,再向上下左右拓展list[i * y + j] = "0";dfs(x, y, list, i - 1, j, flag);dfs(x, y, list, i + 1, j, flag);dfs(x, y, list, i, j - 1, flag);dfs(x, y, list, i, j + 1, flag);
}

总结: 稍微难一点的是3题和9题,需要对【贪心算法+图+深度优先算法】有一些了解,其余的都是考验基本编程能力和动点小脑筋的题目(考察透过题目直击根本逻辑的能力)。

不足:虽然都做出来了,但是耗时太长。大概是有做题恐惧症>.< ,一想到自己在做题,脑袋就不能思考了,一旦停止考试,脑袋就工作正常了。害,还是经历的少了,多做几套大概就好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/625251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ENVI5.6版本中规则与不规则图像裁剪操作

图像裁剪的目的是将研究之外的区域去除&#xff0c;常用的是按照行政区划边界或自然区划边界进行图像的裁剪&#xff0c;在基础数据生产中&#xff0c;还经常要做标准分幅裁剪。按照ENVI的图像裁剪过程&#xff0c;可分为规则裁剪和不规则裁剪。 ENVI5.6之前版本的图像裁剪工具…

linux基础学习(3):挂载

挂载可以理解为给磁盘空间一个可访问的入口&#xff0c;那个入口称为挂载点&#xff0c;相当于windows中的盘符。 1.挂载命令mount 1.1直接输入mount 查看系统已挂载的设备 1.2挂载与卸载命令 mount -t 文件系统名 设备文件名 挂载点 | umount 挂载点 或 umount 设…

衡水学院新人真题百练2022(1-20)修订版

​ 1 重要的话说三遍 分数 5 作者 陈越 单位 浙江大学 这道超级简单的题目没有任何输入。 你只需要把这句很重要的话 —— “I’m gonna WIN!”——连续输出三遍就可以了。 注意每遍占一行&#xff0c;除了每行的回车不能有任何多余字符。 #include<stdio.h> int…

QT-day6

作业1&#xff1a;数据库增删查改 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);if (!db.contains("stu.db")){db QSqlDatabase::addDatabase(&q…

The Plant cell:DAP-seq技术助力揭示BBR/BPC家族的MdBPC2转录因子调控苹果生长素的生物合成从而促进苹果生长及矮化

植物生长素&#xff08;IAA&#xff09;在植物生长发育过程中起着重要的作用。其化学本质是吲哚乙酸。主要作用是使植物细胞壁松弛&#xff0c;从而使细胞生长伸长&#xff0c;在许多植物中还能增加RNA和蛋白质的合成。 目前BARLEY B RECOMBINANT/BASIC PENTACYSTEINE (BBR/BP…

Unity对应SDK和NDK版本的对照表

官网&#xff1a;Unity - Manual: Android environment setup 本人安装的是2022版本长期支持版本2022.3.15f1c1 安装Java的JDK环境就不在这里展开了&#xff0c;就记录下对Android SDK的设置&#xff0c;要与Unity的版本对应&#xff0c;否则会出现很多莫名奇妙的问题。 打开…

自定义vector的实现

实现前需要思考的一个问题 为什么需要将空间的申请与对象的构建分开 查看vector的模板参数时可以看到其有第三个参数是空间适配器allocator&#xff0c;查找其对外提供的成员函数不难发现它的实现逻辑是将空间的申请与对象的构建分开的&#xff0c;为什么呢&#xff1f;不弄清…

SpringBoot异常处理(Whitelabel Error Page和自定义全局异常处理页面)和整合ajax异常处理

SpringBoot异常处理&#xff08;Whitelabel Error Page和自定义全局异常处理页面&#xff09;和整合ajax异常处理 1、springboot自带的异常处理页面Whitelabel Error Page SpringBoot默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程…

MongoDB 索引管理

文章目录 前言1. 术语介绍1.1 index / key1.2 Coverd Query1.3 IXSCAN / COLLSCAN1.4 Selectivity1.5 Index Prefix 2. 索引原理3. 索引的维护3.1 创建索引语法3.2 单字段索引3.3 多字段复合索引3.4 数组的多列索引3.5 全文索引3.6 Hash 索引3.7 TTL 索引3.8 删除索引3.9 后台创…

基于springboot书籍学习平台源码和论文

首先,论文一开始便是清楚的论述了平台的研究内容。其次,剖析平台需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确平台的需求。然后在明白了平台的需求基础上需要进一步地设计平台,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

MongoDB安装与基本使用

一、简介 1.1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 1.2 数据库是什么 数据库&#xff08; DataBase &#xff09;是按照数据结构来组织、存储和管理数据的 应用程序 1.3 数据库的作用 数据库的…

创建React步骤

确保电脑已经安装了node.js以后&#xff0c;打开终端进入目标文件夹 cd xxx(文件夹 npx create-react-app react01(替换为你自己的react名称) 可能会出现是否安装xxx,输入y即可 没有报错信息后&#xff0c;输入 cd react01 npm start 会自动跳转到react界面&#xff0c;就…

翻译: Streamlit从入门到精通 部署一个机器学习应用程序 四

Streamlit从入门到精通 系列&#xff1a; 翻译: Streamlit从入门到精通 基础控件 一翻译: Streamlit从入门到精通 显示图表Graphs 地图Map 主题Themes 二翻译: Streamlit从入门到精通 构建一个机器学习应用程序 三 1. 5. 如何部署一个Streamlit应用 部署是将应用程序从开发…

Linux操作系统——重定向与缓冲区

1.理解一下struct file内核对象 上一篇文章&#xff08;文件详解&#xff09;我们一直在谈&#xff0c;一个文件要被访问就必须要先被打开&#xff0c;打开之前就必须要先把文件加载到内存&#xff0c;同时呢我们的操作系统为了管理文件也会为我们的文件创建相对应的struct fi…

数据库多表查询练习题

二、多表查询 1. 创建 student 和 score 表 CREATE TABLE student ( id INT ( 10 ) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR ( 20 ) NOT NULL , sex VARCHAR ( 4 ) , birth YEAR , department VARCHAR ( 20 ) , address VARCHAR ( 50 ) ); 创建 s…

Qt6入门教程 6:Qt元对象系统

目录 一.什么是Qt元对象系统&#xff1f; 二.编译时Qt Creator偷摸做了哪些事情&#xff1f; 1.uic 2.rcc 3.moc 一.什么是Qt元对象系统&#xff1f; Qt中的元对象系统&#xff08;Meta-Object System&#xff09;提供了对象间通信的信号和槽机制、运行时类型信息和动态属…

uniCloud + uView 上传图片,删除图片(含u-upload 组件的使用)

上传图片 <u-upload imageModeaspectFit height"250" :maxCount1 :fileList"fileList" afterRead"uploadOK" delete"delPic"> </u-upload>::v-deep .u-upload__button {width: 100% !important; }::v-deep .u-upload__wra…

基于JAVA+SSM框架开发的志愿者服务管理系统设计与实现【附源码】

&#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &#x1f4dd; &#x1f680;&#x1f680;&#x1f6…

RK3568笔记九: DRM显示摄像头

若该文为原创文章&#xff0c;转载请注明原文出处。 一、介绍 学习DRM的目的是想做类似NVR显示多路实时流&#xff0c;通过勇哥&#xff08;Marc)的指导&#xff0c;大概流程是通过Zlmedia拉流&#xff0c;RK3568的MPP解码,DRM显示&#xff0c;可以使用HDMI或DIS屏幕&#xf…

ssm+vue的物流配送人员车辆调度管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项项目。

演示视频&#xff1a; ssmvue的物流配送人员车辆调度管理系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&…