题意:将正整数N用2的幂次方表示(彻底分解至2(0),2)。

解法:将层次间和每层的操作理清楚,母问题分成子问题就简单了。但说得容易,操作没那么容易,我就打得挺纠结的......下面附上2个代码,都借用了数组储存,而代码2是我近期打的,应该是更优美一点的。

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4
5 struct node
6 {
7 int s[100];
8 int t;
9 };
10 node a,c[30];
11
12 node div(int x)
13 {
14 int u=0;
15 a.t=0;
16 while (x>0)
17 {
18 if (x%2) a.s[++a.t]=u;
19 x/=2,u++;
20 }
21 return a;
22 }
23
24 int dep=0;
25
26 void print(int x)
27 {
28 if (!x) {printf("%d",x);return;}
29 dep++;
30 c[dep]=div(x);
31 int tmp=dep;
32 for (int i=c[tmp].t;i>=1;i--)
33 {
34 if (i!=c[tmp].t) printf("+");
35 if (c[tmp].s[i]==1) {printf("2");continue;}
36 printf("2(");
37 print(c[tmp].s[i]);
38 printf(")");
39 }
40 }
41
42 int main()
43 {
44 int n;
45 scanf("%d",&n);
46 print(n);//step1=step2=step3...directly recursion
47 return 0;
48 }

1

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6 #define N 20010
7 int s[20][6],h[20];//s[i][] i=sum{2^s[i][1~...]}
8
9 void print(int k)
10 {
11 if (!k) {printf("0");return;}
12 for (int i=1;i<=h[k];i++)
13 {
14 if (i!=1) printf("+");
15 if (s[k][i]==1) {printf("2");continue;}
16 printf("2(");
17 print(s[k][i]);
18 printf(")");
19 }
20 }
21 void init(int x,int id)
22 {
23 h[id]=0;
24 int t=0;
25 while (x)
26 {
27 if (x&1) s[id][++h[id]]=t;
28 x/=2,t++;
29 }
30 for (int i=1;i<=h[id]/2;i++)
31 {t=s[id][i]; s[id][i]=s[id][h[id]-i+1]; s[id][h[id]-i+1]=t;}
32 }
33 int main()
34 {
35 int n;
36 scanf("%d",&n);
37 for (int i=1;i<=16;i++) init(i,i);
38 init(n,17);
39 print(17);
40 return 0;
41 }

2

【noi 2.2_8758】2的幂次方表示(递归)的更多相关文章

  1. 九度OJ 1095:2的幂次方 (递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:913 解决:626 题目描述: Every positive number can be presented by the exponent ...

  2. 中石油—2的幂次方(power)

    问题 E: 2的幂次方(power) 时间限制: 1 Sec  内存限制: 64 MB提交: 38  解决: 19[提交][状态][讨论版] 题目描述 任何一个正整数都可以用2的幂次方表示.例如:13 ...

  3. 洛谷 P1010 幂次方 Label:模拟

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

  4. 算法题----称硬币: 2n(并不要求n是2的幂次方)个硬币,有两个硬币重量为m+1, m-1, 其余都是m 分治 O(lgn)找出假币

    Description: 有2n个硬币和一个天平,其中有一个质量是m+1, 另一个硬币质量为m-1, 其余的硬币质量都是m. 要求:O(lgn)时间找出两枚假币 注意: n不一定是2的幂次方 算法1: ...

  5. 2的幂次方(power)

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

  6. 解题笔记-洛谷-P1010 幂次方

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

  7. NOI-OJ 2.2 ID:8758 2的幂次方表示

    思路 可以把任意一个数转化为2^a+2^b+2^c+...+2^n 例如137的二进制为10001001,这就等效于2^7+2^3+2^0 以上结果如何通过程序循环处理呢?需要把数字n分解为上述公式, ...

  8. P1010 幂次方 递归模拟

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

  9. p1010幂次方---(分治)

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

随机推荐

  1. Java实现PDF和Excel生成和数据动态插入以及导出

    一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...

  2. 剑指offer 树的基本操作:四种遍历方式

    前序遍历 递归版 编程思想 即借助系统栈,效率较低.二叉树的前序遍历规则:1. 访问根结点: 2. 遍历左子树: 3. 遍历右子树 编程实现 //树的定义 struct TreeNode { int ...

  3. LeetCode448-数组中消失的数字

    题目 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能 ...

  4. 【Python】PDF转WORD

    注意,下文中的PDF文档是纯文字格式,而且非扫描版的PDF文件. 如果是扫描版或者带有图片的.可能转起来会出现排版异常并且图片无法保存到.doc文件中. 正文开始: 需要安装依赖包 pdfminer3 ...

  5. 奇技淫巧,还是正统功夫? - Python推导式最全用法

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  6. MCU的心脏-晶振

    晶振是石英晶体谐振器(quartzcrystal oscillator)的简称,它被称为电路系统的心脏,它为整个系统提供"心跳".中央处理器(CPU)一切指令的执行都是建立在这个& ...

  7. CTS相关的几个表

    TMSALOG/TMSALOGAR :STMS传输日志表 TMSCNFS:传输组 TMSCDOM:传输域 TMSCDES:传输目的地 TMSBUFTXT:传输请求的短文本和用户 TMSCSYS:tms ...

  8. uni-app开发经验分享二: uni-app生命周期记录

    应用生命周期(仅可在App.vue中监听) 页面生命周期(在页面中添加) 当页面中需要用到下拉刷新功能时,打开pages.json,在"globalStyle"里设置"e ...

  9. Atlas 2.1.0 实践(3)—— Atlas集成HIve

    Atlas集成Hive 在安装好Atlas以后,如果想要使用起来,还要让Atlas与其他组件建立联系. 其中最常用的就是Hive. 通过Atlas的架构,只要配置好Hive Hook ,那么每次Hiv ...

  10. 精通MySQL之架构篇

    老刘是即将找工作的研究生,自学大数据开发,一路走来,感慨颇深,网上大数据的资料良莠不齐,于是想写一份详细的大数据开发指南.这份指南把大数据的[基础知识][框架分析][源码理解]都用自己的话描述出来,让 ...