【蓝桥杯C/C++】翻转游戏:多种实现与解法解析

文章目录
- 💯题目
- 💯问题分析
- 解法一:减法法
- 解法二:位运算解法
- 解法三:逻辑非解法
- 解法四:条件运算符解法
- 解法五:数组映射法
- 不同解法的比较
- 💯小结

💯题目
![]()
在蓝桥镇,妮妮发明了一个新的游戏——翻转游戏。游戏中有一个开关,可以处于两种状态:开(用 1 表示)和关(用 0 表示)。妮妮发现,无论开关当前处于何种状态,他都可以通过一次操作使得开关的状态翻转。现在,妮妮告诉你开关当前的状态 x,他想知道如果他做一次操作,开关的状态会变成什么。你能帮助他解答这个问题吗?
输入格式:
输入仅一行,包含一个整数 x (0 ≤ x ≤ 1),表示开关当前的状态。
输出格式:
输出一行,表示如果妮妮做一次操作后,开关的状态。
样例输入:
0
样例输出:
1
在这个样例中,开关当前的状态是关(0),所以妮妮做一次操作后,开关的状态会变为开(1)。
运行限制:
| 语言 | 最大运行时间 | 最大运行内存 |
|---|---|---|
| C++ | 1s | 128M |
| C | 1s | 128M |
| Java | 2s | 128M |
| Python3 | 3s | 128M |
💯问题分析
![]()
这个问题本质上是一个开关翻转问题,开关的状态只有两种:0 和 1。因此,我们可以很方便地通过数学运算、位运算、逻辑运算等多种方式实现翻转操作。接下来我们将以 C++ 为例,详细讲解每种方法的实现,并分析其思路和适用性。
解法一:减法法
这是最直观的一种解法,即利用数学运算来实现状态翻转。我们知道开关有两种状态:0 和 1。那么无论 x 的初始状态是 0 还是 1,都可以通过 1 - x 的方式得到翻转后的状态。

代码实现:
#include <iostream>
using namespace std;int main() {std::ios::sync_with_stdio(false);int x;cin >> x;cout << 1 - x << endl;return 0;
}
思路分析:
对于当前状态 x:
- 如果
x为0,那么1 - x的结果为1。 - 如果
x为1,那么1 - x的结果为0。
通过简单的减法操作,我们可以实现状态的翻转。这种解法简单明了,代码也非常简洁,易于理解。其计算量为常数级别,时间复杂度为 O ( 1 ) O(1) O(1),适合大多数场景使用。
解法二:位运算解法
利用位运算的异或操作(^)实现状态翻转也是一种很高效的方法。在二进制逻辑中,异或操作可以用来做翻转。
0 ^ 1 = 11 ^ 1 = 0
也就是说,当前状态与 1 做异或运算,就可以实现翻转操作。

代码实现:
#include <iostream>
using namespace std;int main() {std::ios::sync_with_stdio(false);int x;cin >> x;cout << (x ^ 1) << endl;return 0;
}
思路分析:
在 C++ 中,^ 是按位异或运算符。当两个位不同的时候,结果为 1,相同则为 0。因此 x ^ 1 的效果是:
- 当
x为0时,0 ^ 1得到1。 - 当
x为1时,1 ^ 1得到0。
这种解法的优点在于,它利用了位运算的高效性。位运算的执行速度通常比数学运算更快,因此在需要极高性能的场合,位运算是不错的选择。
解法三:逻辑非解法
我们还可以通过逻辑非运算符 ! 来实现状态翻转。在 C++ 中,逻辑非运算符 ! 可以将布尔值的真假互换。
!0 == true,转为整数就是1!1 == false,转为整数就是0

代码实现:
#include <iostream>
using namespace std;int main() {std::ios::sync_with_stdio(false);int x;cin >> x;cout << !x << endl;return 0;
}
思路分析:
逻辑非运算符可以将 0 变为 1,将 1 变为 0。虽然逻辑非运算符通常用于布尔逻辑判断,但在这种只有 0 和 1 两个状态的问题中,也可以巧妙地应用。利用逻辑非运算符的结果自动转换为整数,可以实现状态翻转。
解法四:条件运算符解法
- 条件运算符(
? :)是 C++ 中的一种三目运算符,可以根据条件的真假执行不同的操作。在这个问题中,我们可以根据x的值选择输出1或0。

代码实现:
#include <iostream>
using namespace std;int main() {std::ios::sync_with_stdio(false);int x;cin >> x;cout << (x == 0 ? 1 : 0) << endl;return 0;
}
思路分析:
该解法利用了条件运算符的特点:
- 当
x == 0时,输出1。 - 当
x != 0时,输出0。
这种方法的好处在于可读性很强,逻辑清晰明了,适合用来增强代码的可维护性。
解法五:数组映射法
- 我们可以定义一个数组,将开关状态映射到它翻转后的状态。利用数组的索引,可以很方便地实现状态翻转。

代码实现:
#include <iostream>
using namespace std;int main() {std::ios::sync_with_stdio(false);int x;cin >> x;int flip[2] = {1, 0}; // 定义翻转表cout << flip[x] << endl;return 0;
}
思路分析:
在这个解法中,我们定义了一个数组 flip,其中:
flip[0]为1flip[1]为0
输入的状态 x(只能是 0 或 1)可以直接作为数组的索引,通过查表的方式得到翻转后的状态。这种解法的优点在于,扩展性较好。如果将来状态种类增多,只需要扩展数组即可,代码的改动最小。
不同解法的比较
![]()
-
减法法 (
1 - x):- 优点:简单、直观,易于实现。
- 缺点:不够灵活,对于状态数较多的场景不适用。
-
位运算解法 (
x ^ 1):- 优点:利用位运算的高效性,性能优异。
- 缺点:代码可能对某些不熟悉位运算的程序员不够直观。
-
逻辑非解法 (
!x):- 优点:逻辑运算的方式实现状态翻转,简单易懂。
- 缺点:逻辑非运算符通常用于布尔类型,可能会降低代码的可读性。
-
条件运算符解法 (
x == 0 ? 1 : 0):- 优点:逻辑清晰,代码可读性强。
- 缺点:代码稍显冗长,相较于其他方法不够简洁。
-
数组映射法 (
flip[x]):- 优点:扩展性好,可以方便地增加状态种类。
- 缺点:对当前只有两种状态的情形而言,显得有些多余。
💯小结

如果代码简洁性和易读性是主要考虑因素,那么减法法 (1 - x) 是最优选择。- 如果需要追求极致的性能,或者对位运算熟悉且希望代码执行效率更高,位运算解法 (
x ^ 1) 是不错的选择。 - 如果问题需要在逻辑判断的基础上扩展为多状态翻转,数组映射法可以提高代码的扩展性和可维护性。.

相关文章:
【蓝桥杯C/C++】翻转游戏:多种实现与解法解析
博客主页: [小ᶻZ࿆] 本文专栏: 蓝桥杯C/C 文章目录 💯题目💯问题分析解法一:减法法解法二:位运算解法解法三:逻辑非解法解法四:条件运算符解法解法五:数组映射法不同解法的比较…...
【AI系统】核心计算之矩阵乘
核心计算之矩阵乘 AI 模型中往往包含大量的矩阵乘运算,该算子的计算过程表现为较高的内存搬移和计算密度需求,所以矩阵乘的效率是 AI 芯片设计时性能评估的主要参考依据。本文我们一起来看一下矩阵乘运算在 AI 芯片的具体过程,了解它的执行性…...
Vue.js 自定义指令:从零开始创建自己的指令
vue使用directive 前言vue2使用vue3使用 前言 关于使用自定义指令在官网中是这样描述的 vue2:对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。 vue3:自定义指令主要是为了重用涉及普通元素的底层 DOM 访问的逻辑。 在 Vue.js 中使用自定义指令…...
策略模式
定义:即定义一系列的算法,算法1,算法2,...,算法n,把他们封装起来,使他们可以相互替换。 优点:使得一个类的行为或者其算法可以在运行时改变,而且使用Context类的人在外部…...
性能优化--CPU微架构
一 指令集架构 Intel X86, ARM v8, RISC-V 是当今广泛使用的指令架构的实例。 大多数现代架构可以归类为基于通用寄存器的加载和存储型架构,在这种架构下,操作数倍明确指定,只能使用夹在和存储指令访问内存。除提供基本的功能之外,…...
在 Sanic 框架中实现高效内存缓存的多种方法
在使用 Sanic 框架开发 Web 应用时,我们可以通过内存缓存来提升应用的性能,减少对数据库或其他外部服务的频繁请求。下面提供一些在 Sanic 中实现内存缓存的基本方法。 使用 Python 内置的 functools.lru_cache 如果你的缓存需求比较简单,且…...
Mac 环境变量配置基础教程
MacOS 下一般配置有多个 Shell,如 Bash、ZSH 等,不同的 Shell 其创建 Terminal 时使用的环境变量配置文件也不尽相同,但一般都会读取并执行脚本文件 /etc/profile 来加载系统级环境变量,而用户级别环境变量,一般都会在…...
Qt如何屏蔽工具栏(QToolBar)自动折叠功能
最近发现Qt上工具栏一行放不下的时候,会自动折叠起来。当用户点击展开功能的小三角按钮时,工具栏会展开成多行。这个功能本身没什么问题,但是当工具栏展开的时候,鼠标光标一旦不小心移动到了工具栏外面,这时候…...
【数据分享】中国统计摘要(1978-2024)
数据介绍 《中国统计摘要(1978 - 2024)》犹如一部浓缩的历史巨著,承载着中国几十年来的发展轨迹与辉煌成就。它是由国家统计局精心编纂的重要资料,为我们全方位地展现了中国在经济、社会、民生等各个领域的深刻变革。 这本统计摘…...
unity运行状态下移动、旋转、缩放控制模型
demo地址:https://download.csdn.net/download/elineSea/90017272 unity2021以上版本用下面的插件 https://download.csdn.net/download/elineSea/90017305...
《 C++ 点滴漫谈 一 》C++ 传奇:起源、演化与发展
摘要 C 是一门兼具高效性与灵活性的编程语言,自上世纪 80 年代诞生以来,已经深刻影响了计算机科学与技术的发展。从 Bjarne Stroustrup 的初步构想到如今遍布各大领域,C 经历了语言规范的不断完善与功能的持续扩展。本文详细回顾了 C 的起源…...
Github客户端工具github-desktop使用教程
文章目录 1.客户端工具的介绍2.客户端工具使用感受3.仓库的创建4.初步尝试5.本地文件和仓库路径5.1原理说明5.2修改文件5.3版本号的说明5.4结合码云解释5.5版本号的查找 6.分支管理6.1分支的引入6.2分支合并6.3创建测试仓库6.4创建测试分支6.5合并分支6.6合并效果查看6.7分支冲…...
自然语言处理:第六十三章 阿里Qwen2 2.5系列
本人项目地址大全:Victor94-king/NLP__ManVictor: CSDN of ManVictor 项目地址: QwenLM/Qwen2.5: Qwen2.5 is the large language model series developed by Qwen team, Alibaba Cloud. 官网地址: 你好,Qwen2 | Qwen & Qwen2.5: 基础模型大派对&a…...
springboot中设计基于Redisson的分布式锁注解
如何使用AOP设计一个分布式锁注解? 1、在pom.xml中配置依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.3.26</version></dependency><dependenc…...
C++初阶学习第十一弹——list的用法和模拟实现
目录 一、list的使用 二.list的模拟实现 三.总结 一、list的使用 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。 常见的list的函数的使用 std::list<int> It {1,…...
共享单车管理系统项目学习实战
前言 Spring Boot Vue前后端分离 前端:Vue(CDN) Element axios(前后端交互) BaiDuMap ECharts(图表展示) 后端:Spring Boot Spring MVC(Web) MyBatis Plus(数据库) 数据库:MySQL 验证码请求...
详细解读TISAX汽车信息安全评估
TISAX汽车信息安全评估是一个针对汽车行业的信息安全评估和交换机制,以下是对其的详细解读: 一、背景与目的 TISAX是在德国汽车工业协会(VDA)的支持下开发的,旨在确保跨公司边界的汽车行业信息安全评估的认可度&…...
gitlab cicd搭建及使用笔记(二)
cicd之gitlab-runner使用要点 官方链接:https://docs.gitlab.com/runner/ 附历史文章链接 https://blog.csdn.net/qq_42936727/article/details/143624523?spm1001.2014.3001.5501 gitlab-runner常用命令及解释 gitlab-runner verify 容器内,检查注…...
鸿蒙实战:页面跳转传参
文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙项目2.2 编写首页代码2.3 新建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 本次实战,学习如何在HarmonyOS应用中实现页面间参数传递。首先创建项目,编写首页代码,实现按钮跳转至第二个页面并…...
Spring Security SecurityContextHolder(安全上下文信息)
在本篇博客中,我们将讨论 Spring Security 的 SecurityContextHolder 组件,包括其实现方式、关键特性,并通过实际示例进行说明。 理解 SecurityContextHolder SecurityContextHolder 是 Spring Security 存储当前安全上下文详细信息的地方。…...
从理论到实践:径向基函数(RBF)插值在数据拟合中的应用
1. 径向基函数插值:给离散数据穿上连续外衣 第一次接触RBF插值时,我正在处理一组气象站采集的温度数据。这些站点像随意撒在地图上的芝麻,有的区域密集,有的区域稀疏。当我试图绘制全国温度分布图时,传统线性插值产生的…...
从物理接口到电平标准:串口、COM口、并口、RS232、USB的演进与实战选型
1. 串口通信的起源与基础概念 第一次接触串口是在大学实验室里,那台老旧的示波器需要通过一个9针的接口连接电脑。当时完全不明白为什么这个看起来像梯形的小接口能传输数据,直到后来拆解了一个鼠标才恍然大悟——原来这就是串口通信的雏形。 串口通信本…...
大模型长文档理解新拐点已至(2026年Claude专项能力解密):支持128K上下文+动态摘要锚点+引用溯源追踪
更多请点击: https://intelliparadigm.com 第一章:大模型长文档理解新拐点已至:Claude 2026能力演进全景图 随着长上下文窗口突破200万token、原生支持跨页语义锚定与结构化元数据感知,Claude 2026标志着大模型对长文档的理解正式…...
基于OkHttp的熔断器实现:ok-breaker原理、配置与实战指南
1. 项目概述与核心价值最近在折腾一个自动化测试项目,需要模拟大量并发请求来压测一个API网关的熔断器(Circuit Breaker)功能。市面上现成的压测工具虽然多,但要么配置复杂,要么对熔断器状态(开、半开、闭&…...
从愚人节实验室踩踏事件看资源分配、排队制度与群体行为管理
1. 项目概述:一个愚人节引发的实验室“踩踏事件” 在任何一个技术驱动的组织里,无论是大型研究院、芯片设计公司,还是一个初创的硬件团队,资源分配永远是一个微妙而充满博弈的话题。设备、工具、甚至是某个紧俏的软件许可证&#…...
通信行业硅转向:从专用ASIC到软件定义网络的架构演进
1. 项目概述:通信行业的硅转向 如果你在2016年前后关注过通信设备行业,尤其是那些做核心路由器、骨干网交换机的“大厂”,你大概能感受到一种山雨欲来的氛围。当时,一篇来自EE Times的报道,标题是“Silicon Shift Ahea…...
3分钟掌握Linux桌面便签神器:Sticky让你的数字工作台效率翻倍!
3分钟掌握Linux桌面便签神器:Sticky让你的数字工作台效率翻倍! 【免费下载链接】sticky A sticky notes app for the linux desktop 项目地址: https://gitcode.com/gh_mirrors/stic/sticky 还在为桌面杂乱无章的纸质便利贴烦恼吗?Sti…...
12种加密音乐格式一键解密:Unlock Music开源工具完全指南
12种加密音乐格式一键解密:Unlock Music开源工具完全指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: ht…...
暗黑破坏神2存档编辑器终极指南:d2s-editor让游戏体验更自由
暗黑破坏神2存档编辑器终极指南:d2s-editor让游戏体验更自由 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾在暗黑破坏神2中为了一件稀有装备反复刷图数小时?是否因为角色属性点加错而懊恼不已&…...
无需联网!Win11 本地 AI 工具 OpenClaw 部署详解
前言 OpenClaw(小龙虾 AI)作为 2026 年备受关注的本地 AI 自动化工具,全程无需依赖网络与云端账号,通过自然语言指令就能完成电脑操作自动化处理,有效提升日常办公与文件管理效率。 安装前重要提醒(必看&a…...
