腾讯2018秋招笔试真题

3、画家小Q

【题目描述】画家小 Q 又开始他的艺术创作。小 Q 拿出了一块有 NxM 像素格的画板, 画板初始状态是空白
的,用’X’表示。
小 Q 有他独特的绘画技巧,每次小 Q 会选择一条斜线, 如果斜线的方向形如’/’,即斜率为 1,小 Q 会选择这
条斜线中的一段格子,都涂画为蓝色,用’B’表示;如果对角线的方向形如’\’,即斜率为-1,小 Q 会选择这条
斜线中的一段格子,都涂画为黄色,用’Y’表示。
如果一个格子既被蓝色涂画过又被黄色涂画过,那么这个格子就会变成绿色,用’G’表示。
小 Q 已经有想画出的作品的样子, 请你帮他计算一下他最少需要多少次操作完成这幅画。
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数 N 和 M(1 <= N, M <= 50), 表示画板的长宽。
接下来的 N 行包含 N 个长度为 M 的字符串, 其中包含字符’B’,’Y’,’G’,’X’,分别表示蓝色,黄色,绿色,空
白。整个表示小 Q 要完成的作品。
输出描述:
输出一个正整数, 表示小 Q 最少需要多少次操作完成绘画。
输入示例:
4 4
YXXB
XYGX
XBYY
BXXY
输出示例:
3
说明:
XXXX
XXXX
XXXX
XXXX
->
YXXX
XYXX
XXYX
XXXY
->
YXXB
XYBX
XBYX
BXXY
->
YXXB
XYGX
XBYY
BXXY

解题思路:
从(0,0)位置开始遍历

  • 如果遍历到(i,j)位置为B——>则继续向左下方(i+1,j-1)和右上方(i-1,j+1)
    遍历时,遇到将B置为X,遇到G置为(消除B)置为Y
    count++;
  • 如果遍历到(i,j)位置为Y——>则继续向左上方(i-1,j-1)和右下方(i+1,j+1)
    遍历时,遇到将Y置为X,遇到G置为(消除Y)置为B
    count++;
  • 如果遍历到(i,j)位置为G——>则分别执行1,2
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;public class Main03 {static char[][] chs = new char[50][50];static int n;static int m;public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();m = in.nextInt();for(int i = 0; i < n; i++) {String str = in.next();for(int j = 0; j < m; j++) {chs[i][j] = str.charAt(j);}}int count = 0;for(int i = 0; i < n; i++) {for(int j = 0; j < m; j++) {if(chs[i][j] == 'B') {dfs_B(i, j);count++;} else if(chs[i][j] == 'Y') {dfs_Y(i, j);count++;} else if(chs[i][j] == 'G') {dfs_B(i, j);count++;dfs_Y(i, j);count++;}}}System.out.println(count);}private static void dfs_B(int i, int j) {if(i >= 0 && i < n && j >= 0 && j < m && (chs[i][j] == 'B' || chs[i][j] == 'G')) {if(chs[i][j] == 'B') {chs[i][j] = 'X';} else if(chs[i][j] == 'G'){chs[i][j] = 'Y';}dfs_B(i + 1, j - 1);dfs_B(i - 1, j + 1);}return ;}private static void dfs_Y(int i, int j) {if(i >= 0 && i < n && j >= 0 && j < m && (chs[i][j] == 'Y' || chs[i][j] == 'G')) {if(chs[i][j] == 'Y') {chs[i][j] = 'X';} else if(chs[i][j] == 'G'){chs[i][j] = 'B';}dfs_Y(i - 1, j - 1);dfs_Y(i + 1, j + 1);}return ;}
}

4、贪吃的小Q

【题目描述】小 Q 的父母要出差 N 天,走之前给小 Q 留下了 M 块巧克力。小 Q 决定每天吃的巧克力数量不
少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少
块巧克力
输入描述:
每个输入包含一个测试用例。
每 个 测 试 用 例 的 第 一 行 包 含 两 个 正 整 数 , 表 示 父 母 出 差 的 天 数 N(N<=50000) 和 巧 克 力 的 数 量
M(N<=M<=100000)。
输出描述:
输出一个数表示小 Q 第一天最多能吃多少块巧克力。
输入示例:
3 7
输出示例:
4

解题思路:
首先想到的是等比求和
首相为x是需要求的值,公比是1/2,一共有N项,满足下列方程
x + 1/2*x + …… + (1/2)^(N-1)*x = M
(等比数列求和公式)变形为——>
x*(1-(1/2)^N) / (1-1/2) = M
x = M / (2 * (1-(1/2)^N))
x求的的值即为最大值
如果x不为整数需向下取整

public class Main04 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int x = (int) Math.ceil((m / (2 * (1 - Math.pow(0.5, n)))));System.out.println(x);}
}

然后只过了20%,:joy:
估计是浮点数的表示范围有限,在计算时数据有丢失
换策略
用二分查找
1 <= x <= M
x每次取中间值,求出第一天吃的巧克力为当前值是需要的总共巧克力与M比较

import java.util.Scanner;public class Main04_2 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int low = 1;int high = m;while(low < high) {int mid = (low + high + 1) >> 1;// /2int need = sum(n, mid);if(need > m) {high = mid - 1;} else if(need == m) {high = mid;break;} else {low = mid;}}System.out.println(high);}private static int sum(int n, int mid) {int need = 0;for(int i = 0; i < n; i++) {need += mid;mid = (mid + 1) >> 1; //不小于前一天的一半,向上取整}return need;}
}

腾讯2018秋招笔试真题(2)相关推荐

  1. 腾讯2018秋招笔试真题(1)

    腾讯2018秋招笔试真题 小Q的歌单 [题目描述]小 Q 有 X 首长度为 A 的不同的歌和 Y 首长度为 B 的不同的歌,现在小 Q 想用这些歌组成一个 总长度正好为 K 的歌单,每首歌最多只能在歌 ...

  2. 腾讯2018秋招笔试真题——安排机器

    本文参考自腾讯2018秋招笔试真题--安排机器 查看原文: 原文地址 题目描述:小Q的公司最近接到m个任务,第i个任务需要Xi的时间去完成,难度等级为yi.                 小Q拥有n ...

  3. 腾讯2018秋招笔试真题-小Q的歌单

    小Q的歌单 [题目描述]小 Q 有 X 首长度为 A 的不同的歌和 Y 首长度为 B 的不同的歌,现在小 Q 想用这些歌组成一个 总长度正好为 K 的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单 ...

  4. 腾讯2019秋招笔试真题

    1.小Q爬塔 描述:小Q正在攀登一座宝塔,这座塔很特别,塔总共有n曾层,但是没两层之间的净高却不相同,所以造成了小Q爬过每层的时间也不同.如果某一层的高度为x,那么爬过这一层锁需的还是件也是x.小Q孩 ...

  5. 腾讯2019秋招笔试真题 1.小Q爬塔 2.妞妞的问题

    1.小Q爬塔 [问题描述]小Q正在攀爬一座宝塔,这座宝塔很特别,塔总共有n层,但是两层之间的净高却不相同,所以造成小Q爬过每层的时间也不同.如果某一次高度为x,那么爬过这一层所需时间也就是x.小Q还会 ...

  6. 【笔试题】京东2017秋招笔试真题

    笔试题 京东2017秋招笔试真题 1.进制均值 时间限制 C/C++语言 1000MS;其他语言 3000MS 内存限制 C/C++语言 65536KB;其他语言 589824KB 题目描述 尽管是一 ...

  7. 滴滴出行2017秋招笔试真题-编程题汇总_Java实现

    滴滴出行2017秋招笔试真题-编程题汇总_Java实现 注:有的题参考别人的思路,用我最容易理解的代码编的程序,所以可以不能最优的解法,后续我会进行更新,只是一个思路,我的笔记而已,所以不喜勿喷~~~ ...

  8. 2018深信服拼多多秋招笔试真题

    网易互娱 处理条件1: 处理5: 处理3,4的同时处理2: 对最后两个字符处理2. 对第3.4个条件的处理: judgeDengcha(int a,b,c){//对第3个条件的处理: if a,b,c ...

  9. 2018年网易秋招笔试真题——游历魔法王国

    链接:https://www.nowcoder.com/questionTerminal/923b9dacf8544e4e83d5e22f5a0e731a 来源:牛客网 魔法王国一共有n个城市,编号为 ...

最新文章

  1. Kubernetes学习笔记三:Docker安装,Docker使用,编写Dockerfile,制作容器镜像,上传docker镜像
  2. 漫画:如何给女朋友解释什么是删库跑路?
  3. 几个常用的Linux监控脚本
  4. dos下打包整个java工程
  5. set集合python_python基础-set集合
  6. 过了一个有意义的愚人节
  7. day20 java的String
  8. 请问诸位大神,Android怎么实现图片转动
  9. 超小股票行情查看软件
  10. 一篇文章教会你用Python抓取抖音App热点数据
  11. 【Chrome】浏览器控制台设置成中文
  12. PostgreSQL 数据库跨版本升级常用方案
  13. 使用cmd命令远程重启服务器
  14. 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?
  15. Ireport 导出pdf 特殊字体设置
  16. 零知识证明学习(一)—— 初始零知识证明
  17. 如何删掉顽固文件和文件夹
  18. 大数据时代之市场调研的必要性
  19. qu32调音台说明书_ALLEN-HEATH QU 系列数字调音台Qu16、Qu24、Qu32功能介绍
  20. 调用阿里云发送短信验证码的工具类

热门文章

  1. Java集成融云服务端
  2. matlab 根轨迹 系统单位阶跃响应,二阶系统单位阶跃响应MATLAB仿真设计.doc
  3. JAVA编写代码实现如下需求:皮球(Ball)分为足球(Football)和排球(Volleyball),各种皮球的运动(play)方法各不相同。
  4. 随笔记:实现HTML页面局部滚动及自定义滚动条样式
  5. 基于Pacemaker+Corosync的PostgreSQL HA故障两例
  6. html如何设定页面4秒后自动跳转,js定时三秒后自动跳转页面
  7. 北京交通大学c语言作业,北京交通大学c语言综合程序设计(黄宇班).doc
  8. Joplin+坚果云同步
  9. 无干扰网络收音机:Radium for Mac
  10. FastJson是如何导致App Crash的