当前位置: 首页 > news >正文

腾讯2017秋招笔试编程题--游戏任务标记 java 实现+ c 实现

时间限制: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;
    }
}


#include <iostream> 
  using namespace std; 
  int main(){ 
      int ID1,ID2; 
      while(cin>>ID1>>ID2){ 
      if(ID1<1||ID1>1024||ID2<1||ID2>1024){ 
          cout<<-1<<endl; 
          continue; 
      } 
      unsigned int tag[32]; 
      int index=0; 
      index=(ID1-1)/32; 
      int temp=0; 
      temp=(ID1-1)%32; 
      tag[index]|=(1<<temp); 
      index=(ID2-1)/32; 
      temp=(ID2-1)%32; 
      if((1<<temp)&tag[index]) cout<<1<<endl; 
      else cout<<0<<endl; 
      } 
      return 0; 
  }

相关文章:

  • 腾讯面试编程给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。
  • Docker的C/S模式
  • Docker与自动化部署
  • docker守护进程和配置操作
  • docker远程访问
  • 大数据的后台分析模式
  • CentOS 7.0关闭默认防火墙启用iptables防火墙
  • URI统一资源定位服务
  • linux免密登陆
  • linux netstat命令
  • 常用linux操作指令
  • hadoop搭建和指令
  • linux WC命令解析
  • linux shell脚本指令
  • linux sed的详细指令
  • avalon2.2的VM生成过程
  • CentOS7 安装JDK
  • CSS 专业技巧
  • java正则表式的使用
  • Median of Two Sorted Arrays
  • MySQL主从复制读写分离及奇怪的问题
  • PaddlePaddle-GitHub的正确打开姿势
  • React Transition Group -- Transition 组件
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • react-native 安卓真机环境搭建
  • 从setTimeout-setInterval看JS线程
  • 基于HAProxy的高性能缓存服务器nuster
  • 计算机在识别图像时“看到”了什么?
  • 设计模式走一遍---观察者模式
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 微信开源mars源码分析1—上层samples分析
  • 主流的CSS水平和垂直居中技术大全
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​VRRP 虚拟路由冗余协议(华为)
  • #define,static,const,三种常量的区别
  • (12)目标检测_SSD基于pytorch搭建代码
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (南京观海微电子)——COF介绍
  • (七)Knockout 创建自定义绑定
  • (三) diretfbrc详解
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)程序员技术练级攻略
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .Net面试题4
  • @font-face 用字体画图标
  • @取消转义
  • @我的前任是个极品 微博分析
  • []T 还是 []*T, 这是一个问题