文章目录

  • 前言
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 【数据范围】
  • 代码
  • 解析
  • 结尾

前言

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

题目描述

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

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

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

进一步:

7=22+2+207= 2^2+2+2^07=22+2+20 ( 212^121 用 222 表示),并且 3=2+203=2+2^03=2+20。

所以最后 137137137 可表示为 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=210+28+25+2+11315=2^{10} +2^8 +2^5 +2+11315=210+28+25+2+1,

所以 131513151315 最后可表示为 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 普及组] 幂次方

输入格式

一行一个正整数 nnn。

输出格式

符合约定的 nnn 的 0,20, 20,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×1041 \le n \le 2 \times {10}^41≤n≤2×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 ;生成共同点处理的同时,处理特殊点2num -= pow(2, i);//将较大的数据拆分成一个个小部分的几个数据相加if (num != 0) {cout << "+";f(num);}// if
}// fint main() {int num;cin >> num;f(num);return 0;
}

解析

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

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

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

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

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


结尾

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

洛谷P1010 [NOIP1998 普及组] 幂次方相关推荐

  1. 信息学奥赛一本通 1208:2的幂次方表示 | OpenJudge 2.2 8758:2的幂次方表示 | 洛谷 P1010 [NOIP1998 普及组] 幂次方

    [题目链接] ybt 1208:2的幂次方表示 OpenJudge 2.2 8758:2的幂次方表示 洛谷 P1010 [NOIP1998 普及组] 幂次方 [题目考点] 1. 递归 [解题思路] 递 ...

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

    P1010 [NOIP1998 普及组] 幂次方 题目描述 任何一个正整数都可以用 22 的幂次方表示.例如 137=27+23+2^0137=27+23+20. 同时约定方次用括号来表示,即 a^b ...

  3. 洛谷P1010 [NOIP1998 普及组] 幂次方 C语言/C++

    [NOIP1998 普及组] 幂次方 题目描述 任何一个正整数都可以用 2 2 2 的幂次方表示.例如 $137=27+23+2^0 $. 同时约定方次用括号来表示,即 a b a^b ab 可表示为 ...

  4. 洛谷P1010 [NOIP1998 普及组] 幂次方题解

    数论递归 题目描述 任何一个正整数都可以用2的幂次方表示.例如137=27+23+20. 同时约定方次用括号来表示,即ab可表示为 a(b). 由此可知,137可表示为2(7)+2(3)+2(0). ...

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

    题目链接 题目大意 任何一个正整数都可以用 2 的幂次方表示.例如 137=27+23+20.137=2^7+2^3+2^0.137=27+23+20. 输入一个整数n,用0和2的二进制表示该整数n. ...

  6. 洛谷 P1010 [NOIP1998 普及组] 幂次方 C++

    题目描述 任何一个正整数都可以用 22 的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即 a^bab 可表示为 a(b)a(b). 由此可知,137137 可表示为 2 ...

  7. 洛谷 P1010 [NOIP1998 普及组] 幂次方 Python题解

    def f1(x):# 获取一个数的幂 137 list = [7 3 0]str1 = bin(x)[2:][::-1]list1 = []for i in range(len(str1)-1,-1 ...

  8. 洛谷P1010 [NOIP1998 普及组] 幂次方 题解

    题目 C++: #include<bits/stdc++.h> using namespace std; string run(int x,int i=0,string s=string( ...

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

    由于有的数字不需要前面那个括号,所以你得先判断如 3=2+2(0); 如果不判断那么3=2(2(0))+2(0); 自己设计的真是菜 从次数判断要不要加括号,加括号是取决于次数,而不是这个数本身 // ...

最新文章

  1. TCP和UDP应用场景
  2. Java仿百度网盘,拿来学习/搞外快,都是极好的选择
  3. HBuilder 无法检测到XCode上的模拟器
  4. 数据结构与算法 -- 时间复杂度
  5. 家用笔记本电脑什么牌子好_电烤箱什么牌子好?哪个牌子的烤箱质量好?家用烤箱什么牌子质量好?...
  6. Windows 网卡配置多VLAN
  7. 视图解析器中配置前缀和后缀---SpringMVC学习笔记(五)
  8. Linux中shell概念笔记
  9. [蓝桥杯][算法提高VIP]夺宝奇兵-递推+记忆化搜索
  10. [js] ajax请求地址只支持http/https吗?能做到让它支持rtmp://等其它自定义协议吗 ?
  11. 聚类算法的java实现_聚类算法之BIRCH(Java实现)
  12. Java工作笔记-Spring Boot封装Jedis实例
  13. FireUIPagedScrollView
  14. Android网络类型判断(2g、3g、wifi)
  15. OCR文字识别,PDF格式转换
  16. IntelliJ IDEA 记学习笔《装阿里代码规范插件》
  17. 搜索引擎 —海量数据搜索
  18. OCCT v11.0.16 x64 电脑硬件检测烤鸡软件中文
  19. 库卡机器人emd价格_什么是机器人零点标定?以kuka机器人为例
  20. Luat模块应用手册-示例-Luat DEMO-长连接超低功耗方案

热门文章

  1. HDOJ--2191--悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包变01背包)
  2. matlab在图片上画矩形、圆、写文字
  3. 内蒙古农业大学的计算机专业怎样,内蒙古农业大学计算机与信息工程学院
  4. L1-043 阅览室 c语言简单
  5. QLineEdit设置不可编辑方案
  6. 网页禁止复制的解决方法
  7. 计算机应用实习大纲,最新计算机应用实习目的
  8. Java项目:在线嘿嘿网盘系统设计和实现(java+Springboot+ssm+mysql+maven)
  9. SpringBoot--maven-wrapper(mvnw)--使用/详解
  10. 纸黄金投资中的技术分析技巧