游戏里面有很多各式各样的任务,其中有种任务玩家只能做一次,这类任务一共有1024个,任务ID范围 [1,1024]。请用32个 unsigned int 类型来记录着1024个任务是否已经完成。初始状

1.题目描述

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

输入描述:输入包括一行,两个整数表示任务ID。

输出描述:输出是否完成。

输入例子:1024 1024

输出例子:1

2.题目分析

我们发现 1024 = 32 * 32。所以我们可以让第一个unsigned int类型来存储 [1,32]的任务ID,第二个unsigned int类型来存储[33,64]的任务ID,依次类推。而且一个unsigned int类型为4个字节大小,即32位,正好对应32个任务ID。

3.code

#include <iostream>
using namespace std;
unsigned int arr[32] = { 0 };
int main()
{
	int m, n = 0;
	while (cin >> m >> n) {
		if (m > 1024 || n > 1024 || m < 0 || n < 0) {
			cout << -1 << endl;
			continue;
		}
		int i = (m - 1) / 32;
		int j = (n - 1) / 32;
		arr[i] |= (1 << (m - 1) % 32);
		int tmp = arr[j] & (1 << (n - 1) % 32);
		if (tmp != 0)
			cout << 1 << endl;
		else
			cout << 0 << endl;
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值