在游戏中有一组日常任务需要完成,每个任务有一个前置任务,记为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")
某游戏内打副本招募玩法中,队长发起招募请求,符合条件的玩家依次报名入队。打完副本后,队长会根据每个队友的战力输出,给予他们一定数量的道具作为应招奖励。
发放奖励规则:
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;
}
}
某游戏设定角色的血量槽值为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]};
}
}
跳棋游戏中,玩家需要从棋盘首位置根据一定规则,跳跃到终点,现跳跃规则如下:
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;
}
}
#秋招##测试开发##笔试##巨人网络校招#