今日熱文:#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 集群