牛客 QQ4 游戏任务标记

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

标签:牛客腾讯题库发布于:编辑于:浏览量:911

概述

https://www.nowcoder.com/practice/2f45f0ef94724e06a4173c91ef60781c

考察位运算。

位运算

  1. 设置右起第 n 位为 1:a = a | 1 << n
  2. 检查右起第 n 为是否为 1:(a >> n) % 2 == 1
#include <iostream>

using namespace std;

int main() {
    uint t[32] = {};
    int a, b;
    cin >> a >> b;
    if (a <=0 || a > 1024 || b <= 0 || b > 1024) {
        cout << -1;
    } else {
        int x = (a - 1) / 32;
        int y = (a - 1) % 32;
        t[x] = t[x] | 1 << y;
        int m = (b - 1) / 32;
        int n = (b - 1) % 32;
        int res = (t[m] >> n) % 2 == 1;
        cout << res;
    }
}