1. 程式人生 > >遊戲任務標記-------------->_

遊戲任務標記-------------->_

[程式設計題] 遊戲任務標記

時間限制:1秒
空間限制:32768K
遊戲裡面有很多各式各樣的任務,其中有一種任務玩家只能做一次,這類任務一共有1024個,任務ID範圍[1,1024]。請用32個unsigned int型別來記錄著1024個任務是否已經完成。初始狀態都是未完成。 輸入兩個引數,都是任務ID,需要設定第一個ID的任務為已經完成;並檢查第二個ID的任務是否已經完成。 輸出一個引數,如果第二個ID的任務已經完成輸出1,如果未完成輸出0。如果第一或第二個ID不在[1,1024]範圍,則輸出-1。
輸入描述:
輸入包括一行,兩個整數表示人物ID.

輸出描述:
輸出是否完成

輸入例子1:
1024 1024

輸出例子1:
1

分析

題目要求用32個 unsigned int 型別來記錄1024個數,每個數有兩種狀態,0或者1,0代表這個任務沒完成,1 代表這個任務未完成。這裡1024個數,用32個unsigned int 表示,那麼如果 1024/32 = 32,每一個unsigned int 要表示32個數(相當於32種狀態位),unsigned int 佔4個位元組,那麼這4個位元組用位來表示32中狀態(4個位元組等於32bit),所以我們可以將1024 分成 32 組,每一個組代表一個unsigned int, 每一個unsigned int 表示32中狀態位,這樣就可以來標識1024中狀態。

Java程式碼實現如下

package com.gcp.test;

import java.util.Scanner;

public class Main5 {

    public static void main(String[] args){
        int[] a = new int[32];

        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            //
            int id1 = sc.nextInt();
            int id2 = sc.nextInt();
            int
result = signAndRet(id1,id2,a); System.out.println(result); } } public static int signAndRet(int id1,int id2,int[] a){ if(id1 < 1 || id1 > 1024 || id2 < 1 || id2 > 1024){ return -1; } //開始標記 int groupId = id1/32; //組號碼 int index = id1%32; //第幾位 int value = 1 << index; if((value & a[index]) == 0){ a[index] += value; } groupId = id2/32; index = id2%32; value = 1 << index; if((value & a[index]) == 0){ return 0; } return 1; } }