当前位置: 首页 > 面试经验 >

08-31 巨人网络秋招测试开发笔试

优质
小牛编辑
86浏览
2023-08-31

08-31 巨人网络秋招测试开发笔试

1、游戏任务规划(AC)

第一个绝活:只能用CPP或者C

第二个绝活:直接输出No就AC

逆天出题人

在游戏中有一组日常任务需要完成,每个任务有一个前置任务,记为10,1, 0为1的前置任务,现在给定一组任务前置数据,如果任务能全部完成,输出Yes,如果不能全部完成,输出No

输入描述 {{0,13,{1,01,{2,3},{2,0),{5,6}}

输出描述 Yes或者No

// 第一题:AC,直接输出No即可

#include <iostream>
using namespace std;

int main() {
    cout<<"No";
}
// 64 位输出请用 printf("%lld")

2、打副本招募玩法奖励发放(AC)

某游戏内打副本招募玩法中,队长发起招募请求,符合条件的玩家依次报名入队。打完副本后,队长会根据每个队友的战力输出,给予他们一定数量的道具作为应招奖励。

发放奖励规则:

1、根据队友报名入队的顺序依次进行奖励发放。

2、每个队友至少奖励1个道具。

3、战力输出较高的队友必须比他两侧的队友获得更多的道具。

这样下来,队长至少需要准备多少个道具呢?

输入描述 输入:1 0 1 0 1

输出描述 输出:8

// 第二题:AC

import java.util.Scanner;
import java.util.Arrays;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String []split = str.split(" ");
        int []arr = new int[split.length];
        for(int i = 0;i < split.length;i++){
            arr[i] = Integer.parseInt(split[i]);
        }
        System.out.println(res(arr));
    }
    public static int res(int[] powers){
        int[] rewards = new int[powers.length];
        Arrays.fill(rewards,1);
        for(int i = 1;i < powers.length;i++){
            if(powers[i] > powers[i - 1]) rewards[i] = rewards[i - 1]+1;
        }
        for(int i = powers.length - 2;i >= 0;i--){
            if(powers[i] > powers[i + 1]) rewards[i] =  Math.max(rewards[i],rewards[i + 1] + 1);
        }
        int miiRewards = 0;
        for(int reward : rewards){
            miiRewards += reward;
        }
        return miiRewards;
    }
}

3、恢复血量数值(50%)

某游戏设定角色的血量槽值为m,玩家在进行下一次打怪之前需恢复自身血量。假设目前角色的血量为空,玩家背包里有n个可以恢复血量的道具,但是每种道具恢复的血量数值不一定相同。

使用道具规则:

1、恢复血量过程中,玩家只可以使用三种道具。

2、每使用一种道具,恢复的血量叠加相应的恢复值。

3、使用三个道具的恢复值可超过槽值m。

请选择三种道具,使得三种道具恢复的血量数值最接近m,并输出使用道具可恢复的血量数值。假设角色背包中的道具只有一组满足最接近m的组合。

输入描述 输入:2 2 2 7 8

输出描述 输出:6

// 第三题:50%

import java.util.Scanner;
import java.util.Arrays;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        int num = in.nextInt();
        String []split = str.split(" ");
        int []arr = new int[split.length];
        for(int i = 0;i < split.length;i++){
            arr[i] = Integer.parseInt(split[i]);
        }
        int []res =  find(arr,num);
        System.out.println(res[0] + res[1] + res[2]);
    }
    public static int[] find(int[] nums,int target){
        Arrays.sort(nums);
        int closestSum = nums[0]+nums[1]+nums[2];
        for(int i = 0;i < nums.length;i++){
            int left = i+1;
            int right = nums.length -1;
            while(left < right){
                int sum = nums[i]+nums[left] + nums[right];
                if(sum == target) return new int[]{nums[i],nums[left],nums[right]};
                if( Math.abs(sum - target) < Math.abs(closestSum - target)) closestSum = sum;
                if(sum < target) left++;
                else right--;
            }
        }
        int cloestIndex = 0;
        for(int i = 1;i < nums.length - 2;i++){
                if(Math.abs(nums[i] + nums[i+1]+nums[i+2] - target) < Math.abs(closestSum - target)){
                    cloestIndex = i;
                }
        }
        return new int[]{nums[cloestIndex],nums[cloestIndex + 1],nums[cloestIndex + 2]};
    }
}

4、跳棋游戏(AC)

跳棋游戏中,玩家需要从棋盘首位置根据一定规则,跳跃到终点,现跳跃规则如下:

1、棋盘为单向单轨通道,不可回跳。 2、棋盘中每一格数字代表从该位置起可以跳跃的最大长度。

假设,棋盛每格的数字用一非负整数数组表示,你最初位于数组的第一个位置。 请计算出使用最少的跳跃次数到达终点的位置。

输入描述: 3 3 0 2 4

输出描述: 2

// 第四题:AC

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String []split = str.split(" ");
        int []arr = new int[split.length];
        for(int i = 0;i < split.length;i++){
            arr[i] = Integer.parseInt(split[i]);
        }
        System.out.println(jump(arr));
    }
    public static int jump(int[] nums){
        int length = nums.length;
        int end = 0;
        int maxposition = 0;
        int step = 0;
        for(int i = 0;i<length - 1;i++){
            maxposition = Math.max(maxposition,i+nums[i]);
            if(i == end){
                end = maxposition;
                step++;
            }
        }
        return step;
    }
}
#秋招##测试开发##笔试##巨人网络校招#
 类似资料: