为什么每次看到这种题的超简短解题代码都会有一种“哇!”的感觉

题意

小Q非常富有,拥有非常多的硬币,小Q的拥有的硬币是有规律的,对于所有的非负整数K,小Q恰好各有两个数值为2^k的硬币,所以小Q拥有的硬币是1,1,2,2,4,4,8,8……,小Q卖东西需要支付n元钱,请问小Q想知道有多少种组合方案。(如果两种方案某个面值的硬币选取的个数不一样就考虑为不一样的方案)

输入

输入:一个n (1<=n<=10^18),代表要付的钱

6

输出

输出:表示小Q可以拼凑的方案数目

3

思路

除了暴力法,毫无思路,真的不会,大家还是看看以下大神级别的思路吧。

这道题我们应该理解为是要进行一种加法,和已经给定为n。然后我们现在有很多种2的k次方的值,要找出所有能加出n的方案。考虑到我们要加的数都是些2的k次方数,这其实跟二进制的位数相加很像,每个硬币都是二进制位数上的一位,而且我们恰好不同种硬币各有两个,即有两个2^0、两个2^1、两个2^2……把这些硬币等分成两份,正好就是两个二进制数,所以可以相当于两个二进制数数相加要得到n(大家自己看下图悟一下)

我们的硬币等分成两行,每一个硬币都是每行上的一个0,因此这就是两个长度为log2(n)的二进制数的相加,和为长度为log2(n)+1的数且首位为1其余位为0。

现在,再将上面图中的两行用十进制的眼光来看,就是十进制要加出个n总共有多少种组合方式,这个就是小学题了,比如n为8,有0+8,1+7,2+6,3+5,4+4。

走到这你就可以理解这份代码了,我们只需要注意两点:

①、假如n为8,是允许如1000和000相加的情况的,也就是硬币8和0(不拿)。

②、111+001(硬币421和硬币1)和101+011(硬币41和硬币21),只是前者选了第一行中面值为1的硬币,后者选了第二行中面值为1的硬币,本质上都得算同一种组合方法,也就是4211和4211都是同一种分法。因此我们可以考虑使用二进制异或来对这种类型进行去重(这样上0下1和上1下0结果都一样了)。

结果都一样后方案还是双份的呀,怎么变成一份呢。可以用set(注意这个容器)来保存抑或结果,这样就去重变成一份了。

代码

# include

# include

using namespace std;

int main(void) {

int n;

cin >> n;

set countset;

for (int i = 0; i <= n/2; i++) {

int result = i^(n-i); // 对两行进行抑或

countset.insert(result);

}

cout << countset.size() << endl;

return 0;

}

Android实训做一个QQ的代码,腾讯2018安卓实习模拟笔试题——小Q硬币组合相关推荐

  1. Android实训案例(九)——答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程

    Android实训案例(九)--答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程 项目也是偷师的,决心研究一下数据库.所以写的还是很详细的,各位看官,耐着性子看完,实现结果不重要 ...

  2. Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!...

    Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写.加上色彩.分数等深度剖析开发过程! 关于2048,我看到非常多大神,比方医生.郭神.所以我也研究了一段时间.还好是研 ...

  3. Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局

    Android实训案例(八)--单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局 阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就 ...

  4. Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!

    Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程! 关于2048,我看到很多大神,比如医生,郭神,所以我也研究了一段时间,还好是研究 ...

  5. android 实训的背景,Android实训项目作业.doc

    Android实训项目作业 2-1用整型数计算两个数的和2 2-7排列任意4个数的顺序,按从小到大顺序输出2 2.1编写显示下列图形的程序.2 3.1编写程序,当点击按钮命令后,页面标题及文本组件的文 ...

  6. Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!

    Android实训案例(三)--实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲 ...

  7. 4由通道检测_大唐阜新煤制天然气「榜样力量」实训做实出实效——废水总酚检测时间由4小时缩短至10分钟...

    今天为大家讲述的正是这样一个需要全体外出实训员工学习的榜样,这个故事就发生在分析中心经理徐胜利身上. 有目标就会有方向.有动力 出发之前,徐胜利就暗自下决心,要不虚此行.刚到克旗公司,他便着手协调成立 ...

  8. 070-JAVA项目实训:仿QQ即时通讯软件系列讲座五(讲解用户注册功能)

    [上一讲]069-JAVA项目实训:仿QQ即时通讯软件讲座四(讲解系统登录功能)_CSDN专家-赖老师(软件之家)的博客-CSDN博客 本文主要内容是实现注册QQ用户功能,自动获取本机IP地址,与系统 ...

  9. Android实训课程之三 这次课老师先是提到了Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。然后重点提到Acti

    Android实训课程之三 这次课老师先是提到了Android有四大组件:Activity.Service.BroadcastReceiver.ContentProvider.然后重点提到Activi ...

最新文章

  1. Windows 和 Linux 应用程序从上到下调用层次比较
  2. html5--6-4 CSS选择器
  3. 初始Zookeeper
  4. P2658 汽车拉力比赛
  5. html 再按一次退出,【劲爆、独家】拦截再按一次退出应用,改成单击back隐藏到后台...
  6. GDAL读取jpg文件中GPS坐标信息
  7. java生成随机数的代码_java随机数代码的三种生成方式怎么编写?
  8. 原型工具axure7.0下载及汉化
  9. FPGA蜂鸣器演奏音乐
  10. 2021高考自贡成绩查询,多图|自贡2021高考进行时
  11. 使用Travis CI进行在线build
  12. html制作古诗网页早发白帝城,《早发白帝城》古诗词
  13. TB交易开拓者入门教程
  14. 14年macmini装双硬盘_2014款Mac mini拆机更换硬盘
  15. 座位预约php,座位预约系统使用指南
  16. android版本连击,死神vs火影无限能量连招版本-死神vs火影无限连招版v3.2 安卓版-腾牛安卓网...
  17. uniapp使用picker
  18. CentOS8服务器时间同步
  19. python将中文转换成utf8_如何在python中从unicode转换成utf8?
  20. 金字塔pyramid

热门文章

  1. 二、Oracle命令行创建数据库
  2. vue壁纸网站源码 自适应手机端 自动采集360壁纸接口
  3. Win系统 - Microsoft Office 安装出现 1935 错误解决办法
  4. 从入门到精通,Java学习路线导航(附学习资源)
  5. 人工神经网络的应用实例,神经网络技术及其应用
  6. C语言 关于for循环里定义的变量
  7. 什么是COM? 什么是COM+?
  8. 梅州英才外语学校计算机,梅州英才外语学校
  9. MySQL基础:使用MySQL Workbench生成ER图
  10. 史上最全鱼骨图分析法