【题目链接】

ybt 2004:【20CSPJ普及组】优秀的拆分
洛谷 P7071 [CSP-J2020] 优秀的拆分

【题目考点】

  • 数制

    • 基数:即进制数。十进制的基数是10,二进制的基数是2。
    • 按位权展开:
      例:1234=1∗103+2∗102+3∗101+4∗1001234 = 1*10^3+2*10^2+3*10^1+4*10^01234=1∗103+2∗102+3∗101+4∗100
    • 十进制转二进制方法:除基取余
      10 / 2 = 5 … 0
      5 / 2 = 2 … 1
      2 / 2 = 1 … 0
      1 / 2 = 0 … 1
      先得到的余数是低位,后得到的是高位。从下向上取数字,得到10对应的的二进制数字为1010

【解题思路】

  • 题目中的拆分,即为数字在二进制下的按位权展开式。
    例:10=23+21=1∗23+0∗22+1∗21+0∗2010 = 2^3 + 2^1 = 1*2^3+0*2^2+1*2^1+0*2^010=23+21=1∗23+0∗22+1∗21+0∗20 ,提取每项前面的系数,就可以得到10的二进制表示为1010。

  • 题目要求拆分后的各个数字必须是2的正整数次幂,也就是说202^020即111不符合要求,奇数在按位权展开后必然会得到一项202^020,因此奇数没有优秀的拆分。

  • 可以通过除基取余的方法得到这个二进制数字,将其记录在一个数字数组中。再从高位向低位遍历这个数字数组,如果数组某元素为1,那么输出该位置对应的位权。
    例:10通过除基取余得到的二进制数字存在数组中,为
    数组元素:0 1 0 1
    数组下标:0 1 2 3
    倒序遍历数组,如果下标为i的元素为1,那么输出2i2^i2i

  • 【注意 :输出样式】pow函数返回浮点型,如数字很长,用cout或printf("%g")输出时,会以科学计数法的形式输出,那样不符合题目要求。应该将pow()函数的返回值转为整型后再输出。

【题解代码】

解法1:

#include<bits/stdc++.h>
using namespace std;
int main()
{int n, num, r[100], ri = 0;//r:数字数组 ri:数组填充用下标 cin >> n;if(n % 2 == 1)cout<<-1;else{for(int a = n; a > 0; a /= 2)//除基取余 r[ri++] = a % 2;for(int i = ri - 1; i >= 0; i--)//倒序遍历数组 {if(r[i] == 1)cout << int(pow(2, i)) << ' ';//输出2^i,要以整型输出,pow返回浮点型,浮点型在很长时输出样式可能变为科学计数法 }}return 0;
}

解法2:

用num记录当前位权,如果当前位权系数为1,那么用数组r记录,位权,最后倒序输出数组r。

#include<bits/stdc++.h>
using namespace std;
int main()
{int n, a, wei, r[100], ri = 0;cin>>n;if(n % 2 == 1)cout << -1;else{//wei为位权,初值1,每次循环乘2,值为1,2,4,8。。。 for(a = n, wei = 1; a > 0; a /= 2, wei *= 2){if(a % 2 == 1)//如果位权前系数为1 r[ri++] = wei;//记录该位权 }for(int i = ri - 1; i >= 0; --i)//倒序遍历输出 cout<<r[i]<<' ';}return 0;
}

信息学奥赛一本通 2004:【20CSPJ普及组】优秀的拆分 | 洛谷 P7071 [CSP-J2020] 优秀的拆分相关推荐

  1. 信息学奥赛一本通 2005:【20CSPJ普及组】直播获奖 | 洛谷 P7072 [CSP-J2020] 直播获奖

    [题目链接] ybt 2005:[20CSPJ普及组]直播获奖 洛谷 P7072 [CSP-J2020] 直播获奖 [题目考点] 计数排序(桶排序) 其核心为:设计数数组c,c[i]表示数字i出现的个 ...

  2. 信息学奥赛一本通 1314:【例3.6】过河卒(Noip2002) | 1921:【02NOIP普及组】过河卒 | 洛谷 P1002 [NOIP2002 普及组] 过河卒

    [题目链接] ybt 1314:[例3.6]过河卒(Noip2002) ybt 1921:[02NOIP普及组]过河卒 洛谷 P1002 [NOIP2002 普及组] 过河卒 [题目考点] 1. 坐标 ...

  3. 信息学奥赛一本通 1967:【14NOIP普及组】螺旋矩阵 | 洛谷 P2239 [NOIP2014 普及组] 螺旋矩阵

    [题目链接] ybt 1967:[14NOIP普及组]螺旋矩阵 洛谷 P2239 [NOIP2014 普及组] 螺旋矩阵 类似考题: 洛谷 P1014 [NOIP1999 普及组] Cantor 表 ...

  4. 信息学奥赛一本通 1919:【02NOIP普及组】选数 | 洛谷 P1036 [NOIP2002 普及组] 选数

    [题目链接] ybt 1919:[02NOIP普及组]选数 洛谷 P1036 [NOIP2002 普及组] 选数 [题目考点] 1.排列组合 2.深搜(子集树) 3.质数 [解题思路] 深搜(子集树) ...

  5. 信息学奥赛一本通 1985:【19CSPJ普及组】加工零件 | 洛谷 P5663 [CSP-J2019] 加工零件

    [题目链接] ybt 1985:[19CSPJ普及组]加工零件 洛谷 P5663 [CSP-J2019] 加工零件 [题目考点] 图论 SPFA算法 [解题思路] 1. 问题分析 每个工人是一个顶点, ...

  6. 信息学奥赛一本通 1981:【18NOIP普及组】对称二叉树 | 洛谷 P5018【NOIP2018 普及组】 对称二叉树

    [题目链接] ybt 1981:[18NOIP普及组]对称二叉树 洛谷 P5018[NOIP2018 普及组] 对称二叉树 [题目考点] 二叉树 [解题思路] 先求出二叉树中各子树的结点数 遍历二叉树 ...

  7. 信息学奥赛一本通 1978:【18NOIP普及组】标题统计 | 洛谷 P5015 [NOIP2018 普及组] 标题统计

    [题目链接] ybt 1978:[18NOIP普及组]标题统计 洛谷 P5015 [NOIP2018 普及组] 标题统计 [题目考点] 1. 字符串 读入带空格的字符串 将带空格的字符串读入字符数组 ...

  8. 信息学奥赛一本通 1365:FBI树(fbi) | 1928:【04NOIP普及组】FBI树 | 洛谷 P1087 [NOIP2004 普及组] FBI 树

    [题目链接] ybt 1365:FBI树(fbi) ybt 1928:[04NOIP普及组]FBI树 洛谷 P1087 [NOIP2004 普及组] FBI 树 [题目考点] 1. 二叉树 [解题思路 ...

  9. 信息学奥赛一本通 1415:【17NOIP普及组】图书管理员 | 洛谷 P3955 [NOIP2017 普及组] 图书管理员

    [题目链接] ybt 1415:[17NOIP普及组]图书管理员 洛谷 P3955 [NOIP2017 普及组] 图书管理员 [题目考点] 1. 枚举 2. 二分 [解题思路] 解法1:枚举 对于每个 ...

最新文章

  1. android 点击事件消费,Android View事件分发和消费源码简单理解
  2. print输出字体特效
  3. javaScriptDay01
  4. Web前端开发入门之网页制作三要素!
  5. 用标准 GHOST镜像xpe系统(EWF保护模式为RAM)时,写保护丢失问题的解决方法
  6. java web 手机验证_Java 手机Web开发 身份验证
  7. 深度拷贝时,类中的非简单类型字段
  8. java c s 比 c c s_Java技术学习笔记:C/S 与B/S 区别
  9. django项目转pyc_Python自动化运维系列:Django搭建小博客
  10. Spark快速大数据分析——Spark的Hadoop配置(肆)
  11. IBM上线了一个人工智能,叫做Project Debater,堪称辩论神器!
  12. 谷歌浏览器JSON格式化插件
  13. 全球及中国图书出版发行业营销策略与运行前景分析报告2022版
  14. Unity - 人物对象的 LOD 管理
  15. 特征图注意力_深入理解图注意力机制
  16. 赵小楼《天道》《遥远的救世主》深度解析(118)女人的客观就那么难么?不难。难的是不想客观的人。
  17. 比例运算电路小结(电路组态 输入电阻)
  18. 前瞻:数据科学中的探索性数据分析(DEA)
  19. 网络安全观察国外政策法规大事件
  20. matlab 逐步回归代码,(最新整理)逐步回归matlab程序

热门文章

  1. sql 基础--mysql 5
  2. hibernate reverse engineering 中没有java src folder
  3. 年薪30k-50k、面试通过率90%,这个职位到底是在做什么?
  4. 关于数据预处理的7个重要知识点,全在这儿了!
  5. 漫画:IT大牛养成记?
  6. 一直认为in,exists 不走索引,被同事鄙视了……
  7. 双非硕士阿里大数据开发面经(已拿offer)
  8. Linux 给新用户授予、设置Tomcat目录的使用权限
  9. 微信开放平台公众号第三方平台开发 教程一 平台介绍
  10. JEECG第16期架构培训班15号开班,每期只有10个名额!想报名的同学速度啦!