程式設計題 遊戲任務標記

2021-08-14 06:26:56 字數 1286 閱讀 2762

內容會持續更新,有錯誤的地方歡迎指正,謝謝!

遊戲裡面有很多各式各樣的任務,其中有一種任務玩家只能做一次,這類任務一共有1024個,任務id範圍[1,1024]。請用32個unsigned int型別來記錄著1024個任務是否已經完成。初始狀態都是未完成。 輸入兩個引數,都是任務id,需要設定第乙個id的任務為已經完成;並檢查第二個id的任務是否已經完成。 輸出乙個引數,如果第二個id的任務已經完成輸出1,如果未完成輸出0。如果第一或第二個id不在[1,1024]範圍,則輸出-1。

輸入描述:

輸入包括一行,兩個整數表示人物id.

輸出描述:

輸出是否完成

輸入例子1:

1024 1024

輸出例子1:

1輸入例子2:

1021 1024

輸出例子2:

0unsigned int為32位,32個unsigned int為32*32=1024位,剛好可以存1024個1/0資料。所以,用位圖(bitmap)來做。

位圖基礎知識請見:

#include 

#include

#define n 1024

using

namespace

std;

int main()

//32*32=1024,32個unsigned int剛好可以存放1024個1、0資料

unsigned

int arr[32];

/*位運算

arr[(id1-1)>>5]:先將[1,1024]變成[0,1023],所以id1-1

再把id1-1除以32,也就是右移5位,得到id1-1在arr中的索引號

把id1-1對32求餘,也就是&31(對於2的冪才能這樣幹),得到其

在該索引中的位號,在將1移動該位號的長度,再把arr[(id1-1)>>5]

和(1<<(id1-1)&31)做或運算,最後複製給等式左邊。*/

arr[(id1-1)>>5]|=(1

<<((id1-1)&31));

//拿id2來驗證是否已完成該任務

cout

<< ((arr[(id2-1)>>5]&(1

<<((id2-1)&31)))!=0) 0;}

#include 

#include

int main()

}return

0;}

騰訊 遊戲任務標記1024

遊戲裡面有很多各式各樣的任務,其中有一種任務玩家只能做一次,這類任務一共有1024個,任務id範圍 1,1024 請用32個unsigned int型別來記錄著1024個任務是否已經完成。初始狀態都是未完成。輸入兩個引數,都是任務id,需要設定第乙個id的任務為已經完成 並檢查第二個id的任務是否已...

2017校招 遊戲任務標記

題目描述 遊戲裡面有很多各式各樣的任務,其中有一種任務玩家只能做一次,這類任務一共有1024個,任務id範圍 1,1024 請用32個unsigned int型別來記錄著1024個任務是否已經完成。初始狀態都是未完成。輸入兩個引數,都是任務id,需要設定第乙個id的任務為已經完成 並檢查第二個id的...

牛客網 遊戲任務標記

遊戲裡面有很多各式各樣的任務,其中有一種任務玩家只能做一次,這類任務一共有1024個,任務id範圍 1,1024 請用32個unsigned int型別來記錄著1024個任務是否已經完成。初始狀態都是未完成。輸入兩個引數,都是任務id,需要設定第乙個id的任務為已經完成 並檢查第二個id的任務是否已...