牛客网2021校招模拟笔试一模(三月份)编程题解析

本文解析了牛客网2021年校招模拟笔试的编程题目,包括"天弃之子"、"刷墙"和"胜者为王"。针对每道题目,提供了解题思路和代码实现,帮助考生理解和解决类似问题。
摘要由CSDN通过智能技术生成

题目1:天弃之子

标题:天弃之子

时间限制: 3秒 内存限制: 262144k 语言限制:不限

有一款游戏,过关的方式是按按钮。游戏一共有几关,每一关有a[i]个按钮,其中只有唯一一个按钮是可以通关的,按下其他的按钮游戏就会失败。

好在这个游戏可以重来,而且由于设计者的疏忽,每一关的通关按钮是不变的,所以你可以记住前几关的按钮,重来时就可以直接通关。

但是你的运气似乎用在了其他地方,你使用了最多的按按钮次数才成功通关。求这个最多的按按钮次数吧!

解题思路

题目提炼: 游戏共有n关,每一关有a[i]个按钮,其中只有一个可以过关,选择错误就会重新开开始,玩家可以通过试错记住正确的按钮。

问玩家运气最差时(每一.关都要试a[i]次才过关)共需要按多少次按钮才能通关。

这道题最重要的环节就是读懂题目,从题意中分析出:每一关都要试a[i]次。 之后就比较容易了。

对于每一关来说,都要进行a[i]-1次失败

每次失败要先通过前面的i-1关,再算上当前这关,需要按i次按钮

所以往答案里累加(a[i]-1)*i

最后再算上最终成功的那一次,通过n关需要按n次按钮即可

代码(两种写法)


public class Solution {
   
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param buttons int整型一维数组
     * @return long长整型
     * 没有转long就会报错,所以一定要转。
     */
    public long findMaxButtons (int[] buttons) {
   
        // write code here
        long count = 0;
        for(int i =0;i<buttons.length;i++){
   
            if(buttons[i]==1) {
   
                count += 1;
                continue;
            }
            else{
   
                long tmp = (i+1)*(buttons[i]-1)+1;
                count+=tmp;
            }
        }
        return count;
    }
   
}
 public long findMinButtons2(int[] a){
   
        long res = a.length;
        for (int i = 0; i < a.len
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值