洛谷P1010 [NOIP1998 普及组] 幂次方

2023-11-20


前言

在做完洛谷P1010 [NOIP1998 普及组] 幂次方这道题之后,我对于现在的学习有了些许认识。

题目描述

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

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

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

进一步:

7 = 2 2 + 2 + 2 0 7= 2^2+2+2^0 7=22+2+20 ( 2 1 2^1 21 2 2 2 表示),并且 3 = 2 + 2 0 3=2+2^0 3=2+20

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

又如 1315 = 2 10 + 2 8 + 2 5 + 2 + 1 1315=2^{10} +2^8 +2^5 +2+1 1315=210+28+25+2+1

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

题目来源:洛谷P1010 [NOIP1998 普及组] 幂次方

输入格式

一行一个正整数 n n n

输出格式

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

样例 #1

样例输入 #1

1315

样例输出 #1

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

【数据范围】

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 2 × 10 4 1 \le n \le 2 \times {10}^4 1n2×104

代码

#include <bits/stdc++.h>
using namespace std;

int first = 1;

void f(int num) {
	int i = 0;
	if (num == 0 ) {
		cout << "0";
		return ;
	}// if ;特殊点0处理
	if (num == 1) {
		cout << "2(0)";
		return ;
	}// if 特殊点0处理
	while (pow(2, i + 1) <= num)
		i++;
	cout << "2";
	if (pow(2, i) != 2) {
		cout << "(";
		f(i);
		cout << ")";
	}// if ;生成共同点处理的同时,处理特殊点2
	num -= pow(2, i);//将较大的数据拆分成一个个小部分的几个数据相加
	if (num != 0) {
		cout << "+";
		f(num);
	}// if
}// f

int main() {
	int num;
	cin >> num;
	f(num);
	return 0;
}

解析

在结合了数据结构这门课之后,我对于处理算法问题有了新的感受。在面对具体的问题的时候,首先要突破现实物理的束缚,将问题间的数学逻辑模型从整个问题中抽取出来

在面对递归问题中,首先要做的是寻找普遍存在的共同点和需要特别处理不符合共同点间处理逻辑的特殊点,将他们的处理方法各自编写出来。

在本题目中,特殊点是2、1、0。
当输入数据或函数接收数据为2时,输出的仅是2,不带括号
当输入数据或函数接收数据为1时,输出的则是2(0)
当函数接收数据为0的时候,结束

25 = 16 + 9 25=16+9 25=16+9
= 16 + 8 + 1 =16+8+1 =16+8+1 _____(1)
= 2 4 + 2 3 + 2 0 =2^{4}+2^{3}+2^{0} =24+23+20____(2)

2 4 2^{4} 24 2 3 2^{3} 23还可以便是所说的普遍存在的共同点,可以继续使用代码中的函数f传入4和3继续进行递归。将4变为 2 2 2^{2} 22,接着2继续传入函数f,抵达特殊点情况;将3变为 2 + 1 2+1 2+1,抵达特殊点情况。


结尾

如有错误遗漏,欢迎评论补充。

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

洛谷P1010 [NOIP1998 普及组] 幂次方 的相关文章

  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • 从时间列表中查找最接近的时间

    所以 这是场景 我有一个带有创建时间的文件 我想从该文件的创建时间最接近或相等的时间列表中选择一个时间 完成此操作的最佳方法是什么 var closestTime listOfTimes OrderBy t gt Math Abs t fi
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • 提升mapped_file_source、对齐方式和页面大小

    我正在尝试在性能很重要的上下文中解析一些大小高达几百兆字节的文本文件 因此我使用 boostmapped file source 解析器期望源以空字节终止 因此我想检查文件大小是否是页面大小的精确倍数 如果是 则使用较慢的非内存映射方法 我
  • 如何设置消息队列的所有者?

    System Messaging MessageQueue 类不提供设置队列所有权的方法 如何以编程方式设置 MSMQ 消息队列的所有者 简短的答案是 p invoke 对 windows api 函数的调用MQSetQueueSecuri
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 如何对STL向量进行排序?

    我想排序一个vector vector
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 与 Entity Framework Core 2.0 的一对零关系

    我正在使用 C 和 NET Framework 4 7 将 Entity Framework 6 1 3 Code First 库迁移到 Entity Framework Core 我一直在用 Google 搜索 Entity Framew
  • 在二进制数据文件的标头中放入什么

    我有一个模拟 可以读取我们创建的大型二进制数据文件 10 到 100 GB 出于速度原因 我们使用二进制 这些文件依赖于系统 是从我们运行的每个系统上的文本文件转换而来的 所以我不关心可移植性 当前的文件是 POD 结构的许多实例 使用 f
  • 解释这段代码的工作原理;子进程如何返回值以及在哪里返回值?

    我不明白子进程如何返回该值以及返回给谁 输出为 6 7 问题来源 http www cs utexas edu mwalfish classes s11 cs372h hw sol1 html http www cs utexas edu
  • 在 C 中使用 #define 没有任何价值

    If a define没有任何价值地使用 例如 define COMMAND SPI 默认值是0吗 不 它的评估结果为零 从字面上看 该符号被替换为空 然而 一旦你有了 define FOO 预处理器条件 ifdef FOO现在将是真的 另
  • 如何知道 HTTP 请求标头值是否存在

    我确信这很简单 但是却让我感到厌烦 我在 Web 应用程序中使用了一个组件 它在 Web 请求期间通过添加标头 XYZComponent true 来标识自身 我遇到的问题是 如何在视图中检查此组件 以下内容不起作用 if Request

随机推荐

  • Redhat Add and Remove Software[No Groups Available in any repository ]

    在 etc yum repos d中把rhel debuginfo repo 修改一下 enabled 1 修改为 enabled 1
  • Java 实现令牌桶限流算法 原生极简实现 包括单机和多线程版本

    文章目录 令牌桶算法简介 令牌桶算法限流范围 单机版实现 多线程版实现 令牌桶算法简介 令牌桶是指一个限流容器 容器有最大容量 每秒或每100ms产生一个令牌 具体取决于机器每秒处理的请求数 当容量中令牌数量达到最大容量时 令牌数量也不会改
  • Python中访问类中的私有变量的两种方法

    我们知道 类中的私有变量是不能直接在类外访问或修改的 因此我们可以设置一个get函数和一个set函数来间接访问和修改私有属性 那么每次访问和修改的都需要调用函数 有没有更简单的方法呢 下面介绍两种方法 1 property 属性函数 比如P
  • 如何保证数据产出质量简述

    如何保证数据产出质量简述 数据质量的评估 数据质量的保障 数据产出流程 机制 revire机制 数据质量保障中的工具 规则 SQLSCAN DQC 基线 数据质量的评估 数据质量可以从一下几个角度进行评估 完整性 完整性是指数据的记录和信息
  • ECG信号三大主要噪声-基线漂移,工频干扰,肌电干扰

    1 基线漂移 基线漂移属于 低频干扰 呼吸的节奏 四肢动作以及前端处理电路设计 都有可能造成基线漂移 致使原始ECG信号漂移之后的 幅度达到R波最大幅值的0 1 0 2倍 ECG信号的一般采用是 粘贴式或吸球式 电极来采集信号 那么存在于体
  • 请关闭该文件夹或文件,然后重试 怎么处理?

    一 打开任务管理器 性能 gt 打开资源监视器 选择CPU gt 搜索句柄中填入文件夹名称 右击结束进程 就能进行操作了
  • 【Linux入门教程】2 文件权限和访问模式、环境变量、管道和过滤器

    Linux文件权限和访问模式 为了更加安全的存储文件 Linux为不同的文件赋予了不同的权限 每个文件都拥有下面三种权限 所有者权限 文件所有者能够进行的操作 组权限 文件所属用户组能够进行的操作 外部权限 其他权限 其他用户可以进行的操作
  • QT编程之信号和槽机制知识

    qt知识总结 一 常见的父窗口有3类 1 QWidget 它是所有对象的基类 继承自QOject和OPaintDevice 2 QMainWindow 它提供了一个主要的应用窗口 可以用来构建APP的应用界面 3 QDialog 对话框 其
  • TensorFlow.js预测鸢尾花种类

    源码连接 TensorFlow js实现鸢尾花种类预测 机器学习文档类资源 CSDN下载 一 加载IRIS数据集 创建index html入口文件 跳转到script主文件 在script js文件夹中利用预先准备好的脚本生成鸢尾花数据集
  • 无公网IP通过旁路由openwrt的Zerotier实现和在家一样访问家里每个设备

    现在的IP地址精贵 很多人拉的线路都没有公网IP了 早期时候有公网IP可以干很多事情 例如架个Web FTP 游戏等各种服务 再通过动态域名 在公司或者朋友可以直接访问 只要映射端口就可以了 如果没有公网IP 其实还有其他办法 例如frp反
  • BGP双平面实验

    实验要求 1 合理IP地址 2 AS 1 2 3 内部使用OSPF 协议 AS 1 AS 2内部建立全互联的IBGP邻居 AS之间建立全部的EBGP邻居 3 PC 1 3 5 属于电信的路由 通信时必须使用电信AS 1 PC 2 4 6 属
  • Linux安装Oracle Database 19c RAC

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net networken article details 120788623 Linux安装
  • 14. Bayesian Networks With Examples in R的学习笔记(贝叶斯网络 bic打分相关)

    bnlearn官网推荐书目 Bayesian Networks With Examples in R 下载了英文版pdf学习了一下 书还是比较浅显易懂的 没有读多少 暂时把自己看的部分整理 翻译到这里留存 欢迎大家交流 pdf下载地址 ht
  • sql drop和delete区别

    drop与delete的区别 初学sql语言 难免被drop和delete用法弄混 二者都有删除的意思 那它们又有什么区别呢 drop主要用于删除结构 例如删除数据库 drop database XX 删除表 drop table XX 字
  • SyntaxError: Unexpected end of JSON input解决方法和思路

    最近在写一个前后台交互的需求 前台点击编辑按钮 直接报错 SyntaxError Unexpected end of JSON input 网上查了下基本都是 一般 双引号 单引号 未成对输入时导致报错 但是我这边没法解决 重新检查了Jav
  • 零基础玩转树莓派(三)—通过SSH远程连接树莓派

    在树莓派使用过程中 我们会经常进行一些调试工作 不方便一直将树莓派与显示屏等相连 需要通过SSH来远程连接访问控制树莓派 一 Windows电脑客户端 使用SSH远程服务 需要先在控制电脑上安装一个客户端PUTTY 1 客户端下载 网页搜索
  • Ubuntu 20.04 如何设置永不息屏

    右键进入settings 找到power 将Blank Screen 设置为Never
  • js时间戳转日期

    方式一 方式一 var date new Date parseInt timeStart 1000 toLocaleString replace d 1 2 最后得到的是2019 8 4 上午9 29 格式的数据 方式二 function
  • Windows10 关于系统中断CPU占用过高导致电脑变卡的解决办法

    Windows10 关于系统中断CPU占用过高导致电脑变卡的解决办法 最近一段时间笔记本一直很卡 不管打开几个程序 任务管理器中总会有CPU占用80 以上 这一度让我抓狂 开始网上搜教程 然后开始了我的各种硬件禁用的道路 这个试了好久 为了
  • 洛谷P1010 [NOIP1998 普及组] 幂次方

    文章目录 前言 题目描述 输入格式 输出格式 样例 1 样例输入 1 样例输出 1 数据范围 代码 解析 结尾 前言 在做完洛谷P1010 NOIP1998 普及组 幂次方这道题之后 我对于现在的学习有了些许认识 题目描述 任何一个正整数都