今日热文:#yyds干货盘点# 名企真题专题:游戏任务标记

2022-12-29 19:17:16 来源:51CTO博客


(相关资料图)

1.简述:

描述

游戏里面有很多各式各样的任务,其中有一种任务玩家只能做一次,这类任务一共有1024个,任务ID范围[1,1024]。请用32个unsigned int类型来记录着1024个任务是否已经完成。初始状态都是未完成。 输入两个参数,都是任务ID,需要设置第一个ID的任务为已经完成;并检查第二个ID的任务是否已经完成。 输出一个参数,如果第二个ID的任务已经完成输出1,如果未完成输出0。如果第一或第二个ID不在[1,1024]范围,则输出-1。

输入描述:

输入包括一行,两个整数表示任务ID.

输出描述:

输出是否完成

示例1

输入:

1024 1024

输出:

1

2.代码实现:

import java.util.Scanner;/** * 用32个int记录1024个任务状态,任务ID为1~1024,任务初始状态都是未完成 * 函数功能:输入两个任务ID,将第一个任务设为已完成,并检测第二个任务是否已完成(完成返回1,未完成返回0) * * 32个int,每个int32位,共32*32=1024位,刚好每一位表示一个任务的状态 */public class T4GameTaskTag {    public static void main(String[] args) {        //tasks[0]:1~32号任务  tasks[1]:33~64号任务        int[] tasks = new int[32];        Scanner in = new Scanner(System.in);        while (in.hasNextInt()) { // 注意 while 处理多个 case            int id1 = in.nextInt();            int id2 = in.nextInt();            System.out.println(setAndCheck(tasks, id1, id2));        }    }    public static int setAndCheck(int[] tasks, int id1, int id2) {        if (!checkInParams(id1, id2)) {            return -1;        }        //任务在tasks[n]  0~31        int n = (id1 - 1) / 32;        //设置id1的任务为已完成        int bit = (id1 - 1) % 32;        tasks[n] = tasks[n] | (1 << bit);        //检查id2的任务是否已完成        int n2 = (id2 - 1) / 32;        int bit2 = (id2 - 1) % 32;        //使用无符号右移:由于java没有无符号数        return (tasks[n2] & (1 << bit2)) >>> bit2;    }    private static boolean checkInParams(int id1, int id2) {        boolean b1 = id1 >= 1 && id1 <= 1024;        boolean b2 = id2 >= 1 && id2 <= 1024;        return b1 && b2;    }}

标签: 初始状态 的任务是 整数表示

上一篇:【世界快播报】#yyds干货盘点# 名企真题专题:最少数量货物装箱问题
下一篇:使用 Tanzu Mission Control 部署具有额外数据卷的 Tanzu Kubernetes 集群