P1010 [NOIP1998 普及组] 幂次方 递归模拟

2023-11-16

题目描述

任何一个正整数都可以用 2 的幂次方表示。例如 137=2^7+2^3+2^0

同时约定方次用括号来表示,即 a^b可表示为a(b)。

由此可知,137 可表示为 2(7)+2(3)+2(0)

进一步:

7= 2^2+2+2^0( 2^1 用 2 表示),并且 3=2+2^0

所以最后 137可表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。

又如 1315=2^10+2^8 +2^5 +2+1

所以 1315 最后可表示为 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。

输入格式

一行一个正整数 n。

输出格式

符合约定的 n 的 0, 2 表示(在表示中不能有空格)。

输入输出样例

输入 #1

1315

输出 #1

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

说明/提示

【数据范围】

对于100% 的数据1≤n≤2×10^4

分析:一道有点毒的递归题,思路比较好想。对一个数比如137,不断用2的次方逼近,比如先用2^7=128第一次逼近,剩下9,9再用2^3=8逼近剩下1。也就是分治的思想。但是实现有些麻烦,直接看代码,细节都在代码里

#include <iostream>
//#include<fstream>
#include<ctime>
#include<math.h>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
string s = "";
int n;
int pw(int a, int b) {
    //cmath里的pow返回的是浮点数,讨论的时候异常麻烦,自己写一个
    int sum = 1;
    for (int j = 1; j <= b; j++) {
        sum *= a;
    }
    return sum;
}
void  dp(int n) {
    int j;
    if (n == 0)return;//特判
    for ( j = 0;; j++) {
        if (n < pw(2, j)) {
            j--;
            break;
        }
    }
    if (j == 0)cout << "2(0)";
    //特殊情况的输出,0被n特判,但是次方可能出现0
    if (j == 1)cout << "2";//特殊格式
    if (j > 1) {//一般情况
        cout << "2(";
        dp(j);
        cout << ")";
    }
    if (n!=pw(2,j))//大于2的次方
    {
        cout << "+";
        dp(n - pw(2, j));//递归剩下的数

    }
}
int main()
{
    cin >> n;
    dp(n);
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

P1010 [NOIP1998 普及组] 幂次方 递归模拟 的相关文章

  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • 为什么libc++的shared_ptr实现使用完整内存屏障而不是宽松内存屏障?

    在boost的实现中shared ptr 它用放松内存排序以增加其引用计数 https github com boostorg smart ptr blob master include boost smart ptr detail sp
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项

随机推荐

  • 微信小程序的常用组件

    目录 一 常用的视图容器类组件 view scroll view swiper 和 swiper item 二 常用的基础内容组件 text rich text 三 其它常用组件 button image navigator 一 常用的视图
  • 启动tomcat服务器,为何要配置CATALINA_HOME和JAVA_HOME ?

    问题 win10系统 本地安装jdk 配置环境变量 是将jdk的bin目录 笔者本地目录为 E JavaTools jdk1 8 0 131 bin 直接配置到系统变量path中 cmd执行java javac都正常 认为jdk安装配置没有
  • vue中运行项目自动打开浏览器失败

    问题 在package json文件中设置 open后自动打开失败 失败 失败后跳转到浏览器中 解决方法 在vue config js中将原先的代码替换成如下代码并保存后 重新编译就ok了 const defineConfig requir
  • 2018-CVPR-NVIDIA-Super SloMo: High Quality Estimation of Multiple Intermediate Frames for Video Inte

    基于光流反向变换的框架 第一部分是双向光流估计 第二部分是进行中间帧的合成 采用了stacking的思想 将光流的估计分成两个阶段 第一阶段是粗估计 第二阶段再进行精调 从而来改善图像的生成效果 此外第二阶段还要估计出掩膜权重 参考 htt
  • ubuntu初次使用笔记

    环境 win7 vmware10 ubuntu13 10 1 上网配置 一般只要装上虚拟机 安装ubuntu之后 选择桥接模式联网即可 但是 也有可能出现奇怪的问题 那么看以下设置 假设ubuntu联网方式设置为NAT NAT和桥接模式的区
  • IT自由职业者的成功秘诀

    原文作者Greg Jorgensen是一位典型的程序员 他从1974年开始编程 曾在耐克和苹果等公司任职 他专攻修复和完善受损 被遗弃和 半生不熟 的Web应用程序 尤其是后台语言是PHP的网站 我从事自由职业已有十余年了 有时候在我有全职
  • Python 日期、时间处理、时间戳转换、获取年份、月份、日、星期几、小时、分钟、秒

    引入 time 模块 import time 获取当前时间戳 unix timestamp current time time print unix timestamp current 1596594152 331776 格式化时间 fmt
  • Uncaught (in promise) TypeError: Cannot set properties of undefined (setting ‘type‘) at main_Mes

    vue项目报错解决办法 删掉 Message 就好了
  • 内网通过计算机名查询IP地址

    计算机环境 win10 内网 已知计算机名为 DESKTOP 40BB7CS 查询计算机IP地址 nbtstat a DESKTOP 40BB7CS 结果 以太网 节点 IP 址址 10 9 54 37 范围 ID NetBIOS 远程计算
  • Latex Picture And Table Setting

    Four Picture in one column begin figure htb begin minipage b 48 linewidth centering centerline includegraphics width 4 0
  • C++11常用新特性汇总

    感谢博主的分享 转载自 http www cnblogs com feng sc p 5710724 html C 11已经出来很久了 网上也早有很多优秀的C 11新特性的总结文章 在编写本博客之前 博主在工作和学习中学到的关于C 11方面
  • java字符串定长前面填充0

    Java中在数字前自动补零方法 public class TestTest public static void main String args 方法一 0 代表前面补充0 4 代表长度为4 d 代表参数为正数型 System out p
  • System V 共享内存

    System V 共享内存 共享内存是什么 如何使用共享内存 ftok shmget shmat shmdt shmctl 共享内存的原理 共享内存实现两个进程间通信 共享内存的特点 共享内存与管道配合使用 两个进程间通信 多个进程间通信
  • CentOS 7安装谷歌浏览器Chrome失败

    问题描述 CentOS 7安装谷歌浏览器Chrome失败 安装上但是点击图标加载但是打不开 谷歌官网下载地址 https www google cn intl zh CN chrome 初步解决 起初我也去搜索了别的博主分享的问题与解决方法
  • linux怎么进入etc目录,Linux 系统的/etc目录

    etc目录下的重要文件 etc sysconfig network 指定服务器上的网络配置信息 etc rc d init d network 网络配置脚本信息 网络配置脚本 开机经过脚本文件来读取相应的配置文件 提供初始化设置 经过 et
  • Origin 2017 给曲线加标记符号

    最近在用Origin 2017画曲线图 需要给图像得曲线加上不同得标记符号用以区分 把操作步骤记录下来 免得忘了 1 用Origin 2017打开一个曲线图 在任意一条曲线上点击右键弹出菜单 选择 绘图更改为 选择 点线图 2 选择之后 可
  • myeclispe

    1 快捷键 ctrl alt h 查哪里调用该方法 ctrl o直接查方法 Ctrl Shift F格式化代码 ctrl f 当前页面快速搜索 ctrl shift r全局搜索类或者 xml文件等 ctrl h file search 全局
  • Springboot程序开启远程DEBUG

    一 远程debug的原理 Spring Boot程序远程debug的原理主要是通过在启动时指定JVM参数来启用远程调试模式 并在调试器中连接到程序所在的调试地址 从而实现对程序的远程调试 具体步骤如下 在运行Spring Boot程序时 在
  • 【2023考研】数据结构常考应用典型例题(含真题)

    前言 本文针对 数据结构 博主花了几天时间列出了考研常考的应用题型 讲解详细 方便复习 各类题型所涉及的知识点包括但不限于队列 二叉排序树 平衡二叉树 哈夫曼树及哈夫曼编码 图的存储 最小生成树 关键路径 排序算法等等 标题即为考点 例题出
  • P1010 [NOIP1998 普及组] 幂次方 递归模拟

    题目描述 任何一个正整数都可以用 2 的幂次方表示 例如 137 2 7 2 3 2 0 同时约定方次用括号来表示 即 a b可表示为a b 由此可知 137 可表示为 2 7 2 3 2 0 进一步 7 2 2 2 2 0 2 1 用 2