1208:2的幂次方表示
【题目描述】
任何一个正整数都可以用2的幂次方表示。例如:

137=27+23+20

同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:

2(7)+2(3)+2(0)

进一步:7=22+2+20(21用2表示)

3=2+20

所以最后137可表示为:

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

又如:

1315=210+28+25+2+1

所以1315最后可表示为:

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

【输入】
一个正整数n(n≤20000)。

【输出】
一行,符合约定的n的0,2表示(在表示中不能有空格)。

【输入样例】
137
【输出样例】
2(2(2)+2+2(0))+2(2+2(0))+2(0)
方法一(方法二的改进版,用一个递归函数):

//1208:2的幂次方表示
#include<iostream>
int i,a[15],num;
using namespace std;void dfs(int n)
{int k;for(k=14;k>=0;k--){if(a[k]<=n)//找到第一个,退出 break;  }//输出2的k次方if(k==0) //输出2的0次方 {cout<<"2(0)";}else if(k==2)//输出2的2次方 {cout<<"2(2)";}else if(k==1)//k=1时,只要输出2,不要输出2(1)的形式。 cout<<"2";else//k不等于0,1,2中的任意一个情况,即k>=3时,要继续分解 {//输出"2(k)",其中k继续调用dfs(k)函数进行分解输出 cout<<"2("; dfs(k);cout<<")";}if(a[k]<n)//比如137,第一次找到k=7,a[7]=128,128<137,输出了2的7次方后,还要输出+,再进行dfs(9)。 {cout<<"+";dfs(n-a[k]);}
}
int main()
{a[0]=1;for(i=1;i<=14;i++)a[i]=2*a[i-1];cin>>num;dfs(num);return 0;
}

方法二(用了2个递归函数,优点麻烦):

//1208:2的幂次方表示
#include<iostream>
int i,a[15],num;
using namespace std;
void dfs(int n);
void pr(int k) //输出2的k次方
{if(k==0) cout<<"0";else if(k==1) return;else if(k==2) cout<<"2";else//当k=0或2时,直接0或2  {dfs(k);}return;
}
void dfs(int n)
{int k;for(k=14;k>=0;k--){if(a[k]<=n)//找到第一个,退出 break;  }//输出2的k次方if(k!=1)//当k不等于1时,2的k次方都要写成"2(k)"形式, {cout<<"2(";pr(k);//输出"2(i)"中间的i cout<<")";}else//k=1是,只要输出2,不要输出2(1)的形式。 cout<<"2";if(a[k]<n)//比如137,第一次找到k=7,a[7]=128,128<137,输出了2的7次方后,还要输出+,再进行dfs(9)。 {cout<<"+";dfs(n-a[k]);}
}
int main()
{a[0]=1;for(i=1;i<=14;i++)a[i]=2*a[i-1];cin>>num;dfs(num);return 0;
}

信息奥赛一本通1208:2的幂次方表示相关推荐

  1. 【算法•日更•第十二期】信息奥赛一本通1585:【例 1】Amount of Degrees题解

    废话不多说,直接上题: 1585: [例 1]Amount of Degrees 时间限制: 1000 ms         内存限制: 524288 KB 提交数: 130     通过数: 68 ...

  2. 信息奥赛一本通的递推练习

    信息奥赛一本通的递推练习 递推与动态规划 1313:位数问题 1314:过河卒 1194:移动路线 1196:踩方格 递推与动态规划 递推解决的问题中满足最优化原理的也是属于动态规划范畴 1313:位 ...

  3. 信息奥赛一本通 三角形最佳路径问题 (1288) 题解

    信息奥赛一本通 三角形最佳路径问题 (1288) 题解 时间限制: 1000 ms 内存限制: 65536 KB 题目描述 如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 ...

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

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

  5. 2038:最大数位置(题目来源于信息奥赛一本通官网)

    2038:[例5.5]最大数位置 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 4876     通过数: 3175 [题目描述] 输入n 个整数,存放在数组a[ ...

  6. 题解1208 2的幂次方表示

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

  7. 信息学奥赛一本通:1084:幂的末尾

    [题目描述] 幂a的b次方的末3位数是多少? [输入] 两个正整数a,b.1≤a≤100,1≤b≤10000. [输出] 从高位到低位输出幂的末三位数字,中间无分隔符.若幂本身不足三位,在前面补零. ...

  8. HOJ 系统常用功能介绍 部署快速入门 c++ python java编程语言在线自动评测 信息奥赛一本通 USACO GESP 洛谷 蓝桥 CSP NOIP题库

    技术支持微 makytony 服务器配置需求 腾讯云 2H4G 5M 60GB 轻量应用服务器  承载大约 200~400人使用,经过压力测试,评测并发速度可满足130人左右的在线比赛. 系统镜像选 ...

  9. 【算法•日更•第十四期】信息奥赛一本通1592:【例 1】国王题解

    废话不多说,直接上题: 1592:[例 1]国王 时间限制: 500 ms         内存限制: 65536 KB 提交数: 290     通过数: 111 [题目描述] 原题来自:SGU 2 ...

最新文章

  1. 计算机操作培训主持词,魅力女性沙龙会主持词文稿.docx
  2. IT团队之非正式沟通
  3. 深度解读 OpenYurt :边缘自治能力设计解析
  4. Python 列表List的定义及操作
  5. 网鼎杯2020php反序列化,2020-网鼎杯(青龙组)_Web题目 AreUserialz Writeup
  6. Linux用sendmail发信失败,提示Connection refused by [127.0.0.1]
  7. c++笔记(8) 指针及动态内存管理
  8. 006 - node.js
  9. Android总结篇系列:Activity中几个主要函数详解
  10. 怎样才能称得上一个好运维
  11. 表情识别(一)——使用Dlib、opencv和Python识别面部特征
  12. 腾讯云服务器价格表在哪里查看?
  13. 注意力机制与V_net神经网络的介绍与实现
  14. 19 「沉淀」,20「继续沉淀」
  15. php 图片抠图,php 图像处理 抠图,生成背景透明png 图片
  16. 名表商城ECshop程序网站源码 在线商城网站源码wap+H5支付+https
  17. Cat5 KVM切换器线材的优势
  18. 通讯软件002——快速使用modscan进行modbus调试
  19. 联通、电信、移动、积分兑换话费
  20. 统计java类含有多少个方法_35个Java代码优化的小技巧,你知道几个?

热门文章

  1. 饭卡管理程序c语言代码,C++ 简单饭卡管理系统
  2. 关于工伤事故索赔计算很好用的一款APP
  3. 伯努利分布(Bernouli Distribution)
  4. centos java 安装路径_Centos7下查询jdk默认安装路径
  5. 【5G系列】AS层的网络选择(3)——小区重选标准
  6. 历史遗留问题ms解决掉了
  7. 如何从零打造一把专属的 “客制化机械键盘” —— 个人指南来啦
  8. pip install 和conda install的区别是什么?
  9. 一些用于聚类和分类问题的数据集
  10. Jackson转换JSON