美团2024届秋招笔试编程真题|第一场⑥
- 2026-10-30 20:04:18
美团2024届秋招笔试编程真题|第一场⑥
匹配职位 Java工程师、C++工程师、iOS工程师、安卓工程师、运维工程师、前端工程师、算法工程师、PHP工程师、测试工程师、安全工程师、golang工程师、测试开发工程师 编程题 ⑥小美走公路 有一个环形的公路,上面共有n站,现在给定了顺时针第i站到第i+1站之间的距离(特殊的,也给出了第n站到第1站的距离)。小美想沿着公路第x站走到第y站,她想知道最短的距离是多少? 输出描述: 示例1 示例2 答案1(作者:感性的肖恩在做核酸) 答案2(作者:黄小黄本黄)
答案3(作者:最好的小区的最好的保安_两年内当上队长) 关注牛客app 工作日每天更新 笔试真题&详细答案 
24届春招同行双选会 理工类专业专场,开放报名 👇扫描下方二维码即可报名👇
⬆️点击上方蓝色字,关注牛客app⬆️
查看更多实习校招信息更新

时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M
输入描述:
第一行输入一个正整数n,代表站的数量。第二行输入n个正整数ai,前n-1个数代表顺时针沿着公路走,i站到第i+1站之间的距离;最后一个正整数代表顺时针沿着公路走,第n站到第1站的距离。第三行输入两个正整数x和y,代表小美的出发地和目的地。1≤n≤10的5次方1≤ai≤10的9次方1≤x,y≤n
一个正整数,代表小美走的最短距离。输入例子:31 2 22 3输出例子:2
输入例子:31 2 21 3输出例子:2
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int n = in.nextInt();int[] nums = new int[n];int i = 0;long sum = 0;for (;i<n;i++) { // 注意 while 处理多个 casenums[i] = in.nextInt();sum += nums[i]; // 记录全部路程 即一圈的路程}int start = in.nextInt();int end = in.nextInt();long counterclockwise = 0; //顺时针需要的路程// 由于下面只计算顺时针的路程 因此当开始站点大于结束站点时 做一个反向int s = Math.min(start, end);int e = Math.max(start, end);for(i=s-1; i<e-1; i++){counterclockwise += nums[i];}// 逆时针路程=总路程减去顺时针路程System.out.println(Math.min(counterclockwise, sum-counterclockwise));}}
#include <cstdio>#include <iostream>#include <vector>using namespace std;int main() {int n;scanf("%d", &n);vector<int> a(n + 1, 0);vector<long long> b(n + 1, 0);for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);b[i] = b[i - 1] + a[i];}int x, y;scanf("%d %d", &x, &y);int result = 0;// 顺时针走if (y >= x) printf("%lld", min(b[y - 1] - b[x - 1], b[n] - (b[y - 1] - b[x - 1])));else printf("%lld", min(b[x - 1] - b[y - 1], b[n] - (b[x - 1] - b[y - 1])));return 0;}
package mainimport ("fmt")func main() {var n intfmt.Scan(&n)dis := make([]int, n)for i:=0; i<n; i++ {var d intfmt.Scan(&d)dis[i] = d}var start, end intfmt.Scan(&start, &end)if start > end {start, end = end, start}// 正向走sumZ := 0for i:=start; i<end; i++ {sumZ += dis[i-1]}// 反向走sumF := 0// 1. 从 end 到最后for i:=end; i<=n; i++ {sumF += dis[i-1]}// 2. 从 1 到startfor i:=1; i<start; i++ {sumF += dis[i-1]}if sumF < sumZ {fmt.Println(sumF)} else {fmt.Println(sumZ)}}


百家春招企业,1000+在招职位

本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。