信息学奥赛一本通 1208:2的幂次方表示

2023-10-29

【题目链接】

ybt 1208:2的幂次方表示
OpenJudge NOI 2.2 8758:2的幂次方表示
洛谷 P1010 [NOIP1998 普及组] 幂次方

【题目考点】

1. 递归

【解题思路】

  • 递归问题:将数字k转为2的幂次方表示的字符串
  • 递归关系:
    二进制按位权展开式形式如下:
    k = d 0 ∗ 2 0 + d 1 ∗ 2 1 + . . . + d k ∗ 2 k k = d_0*2^0+d_1*2^1+...+d_k*2^k k=d020+d121+...+dk2k
    将数字k转为二进制数,即为在二进制下作数字拆分,与十进制数字拆分类似。

    例:下面的代码为将数字k转为二进制并逆序输出

    for(int a = k; a > 0; a /= 2)
    	cout << a%2;
    
    拆分出的第0个数字为 d 0 d_0 d0,位权为 2 0 2^0 20,第1个数字为 d 1 d_1 d1,位权为 2 1 2^1 21…,第i个数字为 d i d_i di,位权为 2 i 2^i 2i
    将k在二进制下作数字拆分,如果第i次拆分出的数字 d i d_i di为0,则略过。如果第i次拆分出的数字 d i d_i di不为0,则看i的值。
    • 如果i为0,那么这一项为2(0)
    • 如果i为1,那么这一项为2
    • 如果i大于1,那么这一项为2(s),括号里的字符串s为将数字i转为2的幂次方表示的字符串,可以通过递归调用本函数得到。
  • 递归出口:
    • 如果i为0或i为1的情况就是递归出口。

【题解代码】

解法1:递归
#include<bits/stdc++.h>
using namespace std;
string solve(int k)
{
    string s;
    for(int a = k, i = 0; a > 0; a /= 2, i++)//其中一项为a%2*2^i
    {
        if(a%2 == 1)
        {
            if(i == 0)
                s = "2(0)+" + s;//逆序构造字符串,需要将新得到的字符串接在s的前面 
            else if(i == 1)
                s = "2+" + s;
            else
                s = "2(" + solve(i) + ")+" + s;                
        }
    }
    s.pop_back();//如果如上述方法构造字符串,最后末尾会多一个"+",将这个"+"删掉。
    return s;
}
int main()
{
	int n;
	cin >> n;
	cout << solve(n);
  	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

信息学奥赛一本通 1208:2的幂次方表示 的相关文章

  • 以相反的顺序迭代可变参数模板参数

    如果我手动反转传递给它的模板参数的顺序 以下代码将起作用 template
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • 在运行时设置 DataGridView 上的 DataFormatString?

    是否可以在运行时设置 ASP NET DataGridView 中的列或单元格的 DataFormatString 属性 这应该有效 BoundField priceField grid Columns 0 as BoundField pr
  • 为什么假设 send 可能返回的数据少于在阻塞套接字上传输的请求数据?

    在流套接字上发送数据的标准方法始终是调用 send 并写入一大块数据 检查返回值以查看是否发送了所有数据 然后再次调用 send 直到整个消息被接受 例如 这是一个常见方案的简单示例 int send all int sock unsign
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • 如何在 Windows 窗体中运行屏幕保护程序作为其背景?

    如何在 Windows 窗体中运行屏幕保护程序作为其背景 用户还可以在屏幕保护程序运行时与表单控件进行交互 为什么这个 我们有一个案例 需要在用户时运行 Windows Bubbles 屏幕保护程序 可以继续与表单控件交互吗 您可以使用以下
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • 如何使用泛型类型的 DataContractSerializer 编写自定义序列化器?

    我想编写一个自定义序列化器 用于将会话状态存储到Azure 缓存 预览版 这意味着这个自定义序列化器必须实现IDataCacheObjectSerializer 如果我错了 请告诉我 我需要编写这个自定义序列化程序的原因是我需要序列化一些包
  • QThread - 使用槽 quit() 退出线程

    我想在线程完成运行时通知对象 但是 我无法让线程正确退出 我有以下代码 处理器 cpp thread new QThread tw new ThreadWorker connect tw SIGNAL updateStatus QStrin
  • 不要声明只读可变引用类型 - 为什么不呢?

    我一直在阅读这个问题 https stackoverflow com questions 2274412 immutable readonly reference types fxcop violation do not declare r
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 在何处将 CFLAG(例如 -std=gnu99)添加到 (Eclipse CDT) 自动工具项目中

    我有一个简单的 Autotools C 项目 不是 C 其框架是由 Eclipse CDT Juno 为我创建的 CFLAG 通过检查 似乎是 g O2 我希望所有生成的 make 文件也具有 std gnu99附加到 CFLAG 因为我使
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D

随机推荐

  • OPENGL学习(四)GLUT三维图像绘制

    文章目录 1 绘制一个旋转的立方体 普通视角变换 2 绘制一个旋转的立方体 透视视角变化 3 画两个旋转方向不同的立方体 对于三维目标来说 最主要的就是有坐标变换问题 也就是说有视角问题 1 绘制一个旋转的立方体 普通视角变换 下面这个程序
  • 【云原生之Docker实战】使用Docker部署Taskcafe项目管理工具

    云原生之Docker实战 使用Docker部署Taskcafe项目管理工具 一 Taskcafe介绍 1 Taskcafe简介 2 Taskcafe功能 二 检查宿主机系统版本 三 检查本地docker环境 1 检查docker服务状态 2
  • 内存监控命令

    一 内存大小查看 1 free m m为单位 MB 静态查看 total 总内存 used 已经使用了的 free 空闲的 shared 共享 buffers 缓冲区 cached 缓存区 buffers cache 当内存不足时 会将bu
  • C++新特性37_条件变量的C++封装(_Cnd_wait的使用;条件变量在C++中的封装类及使用;其代码使用与上篇基本一致;后期如果使用就采用此处封装的方法)

    接上篇 C 新特性36 条件变量的使用 前面介绍了条件变量的引入和使用 本篇介绍C 中是如何封装的及如何使用 C 新特性37 条件变量的C 封装 1 Cnd wait的使用 2 条件变量在C 中的封装类及使用 1 Cnd wait的使用 上
  • 第三十七讲:神州无线AP胖AP模式高级配置Ⅰ

    在同一AP上配置多个SSID 建立多个WLAN 关联一个或多个VLAN VLAN的网关配置在三层设备上 AP的上联口必须为中继模式 才能广播多个SSID 对应多个VAP 默认只开启一个VAP 新增的要手动开启 配置要求 配置同一AP广播两个
  • python扫描文件代码

    前言 由于在公司接触大量的关于公民隐私的数据 所以才有了这个代码 菜鸟程序员 所以代码方面不是写的很漂亮 这篇代码是为了扫描出所有含有身份证号的excel 并移动到相应的文件夹内 创建日志 解压压缩包等 逻辑很简单 具体的可以看代码 都有注
  • Android之AdapterView及其子类的介绍

    Apater是适配器 AdapterView 显示一堆数据 AbsListView ListView GridView AbsSpinner Gallery Spinner ListView ExpandableListView Adapt
  • MongoDB数据库的备份与恢复详解

    本文主要介绍了MongoDB数据库的备份与恢复的知识 包括冷备份 以及备份和恢复两种工具的使用 最后介绍了读扩展式的备份机制 希望能够对您有所帮助 MongoDB是怎么实现数据的备份与恢复 故障切换以及数据库服务器的负载均衡等功能的呢 本文
  • Centos7基于源码包搭建Elasticsearch以及head插件

    目录 1 jdk安装 2 创建centos用户启动es 高版本的es不能使用root进行启动 3 下载安装es 4 ik分词器安装 5 Head插件安装 5 1 node js安装 5 2 grunt cli安装 5 3 cnpm安装 5
  • 《异常点检测》 - 第十章阅读记录 - 离散序列的异常点检测

    20201006 本文主要作为 异常点检测 的第十章的内容记录 文章按照顺序的方式来进行记录 想到什么记录什么 暂时没有明确的条理 1 基础概念记录 1 1 离散数据的定义 离散数据与连续数据有所不同 离散数据在实际中主要有两种 基于时间的
  • 7、kali安装输入法

    1 安装命令 拼音 apt install ibus ibus pinyin 五笔 apt install ibus ibus table wubi 2 初始化命令 im config 3 重启系统 reboot 4 设置输入法 ibus
  • 通过读dcat-admin源码学习laravel

    通过读dcat admin源码学习laravel 第一次接触laravel 直接去读文档总觉得有点生涩 就想通过一个项目入手对laravel进行学习 于是通过官方推荐对dcat admin在homestead环境中进行了安装启动 好家伙 可
  • 让你的Java Swing界面变得更好看,这是我用过最好看的皮肤包了?

    Java Swing皮肤包之beautyeye 前言 一 皮肤包分享 二 皮肤包的使用 1 先新建一个项目 2 导入皮肤包 1 先导入我们刚刚下载的jar文件 右键项目demo即可 2 如果右键没有这个选项 记得调为下图模式 3 点击下图蓝
  • 40页PPT

    今日和大家分享的是天津大学智能制造与测控技术研究院田颖 智能制造与数字孪生技术 面向可持续制造方向发展 一 新一代智能制造模式下的思考二 智能制造与数字孪生三 新一代智能制造高端人才培养 编辑 陈静岚 审核 李子 新闻投稿 商务咨询热线 1
  • 算法基础课-基础算法

    基础算法 第一章 基础算法 1 快速排序 2 归并排序 3二分算法 整数二分 浮点二分 4 高精度 高精度加法 高精度减法 高精度乘法 一个高精度乘正常整数 高精度除法 一个高精度除以正常整数 5 前缀和 一维前缀和 二维前缀和 6 差分
  • 采集gpu_Oculus Quest、Go开始支持GPU性能分析工具Unity GPU Profiler

    查看引用 信息源请点击 映维网 Oculus Quest和Oculus Go已经支持GPU性能分析工具Unity GPU Profiler 映维网 2019年08月12日 Unity GPU Profiler这款工具旨在帮助开发者优化应用程
  • 人工智能值得研究的领域有哪些?

    人工智能的关键技术是深度学习 通过模拟人类大脑的神经网络来读取 处理大数据 并找出其中规律 完成特定任务 以深度学习为关键技术的人工智能现已逐渐成为各国研发投入的重点 目前发展已到应用阶段 尽管人工智能的发展早已渗透人们生活的方方面面 但你
  • 机器人编程python代码_自己动手开发智能聊天机器人完全指南(附python完整源码)...

    一 前言 人工智能时代 开发一款自己的智能问答机器人 一方面提升自己的AI能力 另一方面作为转型AI的实战练习 在此把学习过程记录下来 算是自己的笔记 二 正文 2 1 下载pyaiml 下载pyaiml 2 2 安装 pip instal
  • 本地文件怎么传到linux服务器,本地文件传到linux服务器

    本地文件传到linux服务器 内容精选 换一换 本文介绍如何在 Linux 系统的本地机器上使用 FTP 服务 将文件从本地上传到云服务器中 已在待上传文件的云服务器中搭建 FTP 服务 如果您的云服务器为 Windows 操作系统 具体操
  • 信息学奥赛一本通 1208:2的幂次方表示

    题目链接 ybt 1208 2的幂次方表示 OpenJudge NOI 2 2 8758 2的幂次方表示 洛谷 P1010 NOIP1998 普及组 幂次方 题目考点 1 递归 解题思路 递归问题 将数字k转为2的幂次方表示的字符串 递归关