题目描述:

一个整数可以拆分为2的幂的和,例如:

7 = 1+ 2 +
4

7 = 1 + 2
+ 2 + 2

7 = 1 + 1
+ 1 + 4

7 = 1 + 1
+ 1 + 2 + 2

7 = 1 + 1
+ 1 + 1 + 1 + 2

7 = 1 + 1
+ 1 + 1 + 1 + 1 + 1

总共有六种不同的拆分方式

再比如: 4可以拆分成:
4 = 4, 4 = 1+1+1+1, 4 = 2+2, 4 = 1+1+2.

用f(n)表示n的不同拆分的种数,例如f(7)
= 6.

要求:

要求读入n(不超过1000000),输出f(n)
% 1000000000。

思路分析:

  • 这个题目没有直接的公式可以使用,考虑递归
  • 运用动态规划的思想
  • 当那2k +1,f(2k+1)的肯定包含一个1,f(2k+1)=f(2k)
  • n是偶数的时候,拆分情况分为包含1以及不包含1两种情况,f(2k)= f(2k-2)+f(k),包含1的情况,肯定包含至少两个1,不包含1的情况都除以2,是f(k)
  • 另外注意输出要%1000000000,注意余数的性质:(a+b)%m = (a%m+b%m)%m,所以只要对每个中间结果也都取余数,就不会有溢出问题,且不会改变最终输出结果 -

代码:

import java.util.Scanner;public class Main {static int[] num = {1,2,5,10,20,50,100};public static void main(String[] args) {Scanner scan = new Scanner(System.in);while(scan.hasNext()){int input = scan.nextInt();if(input < 1){return;}System.out.println(getNumber(input));}   }public static int getNumber(int n){if(n == 1){return 1;}if(n == 2){return 2;}if(n % 2 != 0){return getNumber(n-1)%1000000000;}else{return getNumber(n-2)%1000000000+getNumber(n/2)%1000000000;}}
}

我的微信二维码如下,欢迎交流讨论

欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!

微信订阅号二维码如下:

  • -

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

转载于:https://www.cnblogs.com/fengsehng/p/6048703.html

华为机试题【9】-整数分割为2的幂次相关推荐

  1. 【华为机试题分析】 4 字符串分割

    我的首发平台是公众号[CodeAllen],学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 [华为机试题分析] 4 字符串分割 #include <stdio.h> ...

  2. 牛客网华为机试题(JavaScript)

    最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处 ...

  3. 华为机考题 004字符串分割

    转自:http://blog.csdn.net/sxl_545/article/details/52412203 华为机考题 004字符串分割 标签: 华为机考刷题 2016-09-02 11:10  ...

  4. 【牛客网】华为机试题(00、C++版本)

    华为机试题,本来以为对一些基础的程序还是有点信心的:不过不练不知道,一练吓一跳.平时虽然也都码程序,但是一到机试题就各种乱七八的不适应.还是要加强一下练习. 1.字符串最后一个单词的长度 题目描述:计 ...

  5. 华为机试题库+题解【C语言版】

    文章目录 前言 1.字符串最后一个单词的长度[***] 描述 输入描述 输出描述 示例 解题代码 2.计算某字符出现次数[****] 描述 输入描述 输出描述 示例 解题代码 3. 明明的随机数[** ...

  6. 华为机试python编程题_牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  7. 【华为机试题分析-C/C++】知识点分类总结

    专栏地址:https://blog.csdn.net/super828/category_10825347.html 字符串 [华为机试题分析] 1 字符串最后一个单词的长度 [华为机试题分析] 2 ...

  8. 华为电脑c语言总是错误,关于华为机试题求代码!解决方法

    关于华为机试题求代码!!! n个字符串,1 如n=3 1.what is local bus? 2.this is local bus. 3.local bus is name sdhfj. 那么最长 ...

  9. 【牛客网-华为机试题目录】持续更新中

    文章目录 博主精品专栏导航 华为机试题:HJ80 整型数组合并(python) 华为机试题:HJ76 尼科彻斯定理(python) 华为机试题:HJ73 计算日期到天数转换(python) 华为机试题 ...

  10. 华为机试题-20190417

    华为某次Java机试题 介绍 1 2 3 介绍 本次机试题,发生时间:2019年04月17日,19:00. 上一次试题,发生时间:2019年04月03日,19:00. 本次机试3题,均AC. 1 题目 ...

最新文章

  1. C# .net 下拉框显示提示内容-【ComboBox】
  2. 传智杯Java终端有一天您厌烦了电脑上又丑又没用的终端,打算自己实现一个 Terminal
  3. 我的家计算机教学反思,《我的家》教学反思
  4. 瞧瞧苹果OS X如何干掉Linux
  5. AndroidStudio_安卓原生开发_在fragment中如何使用Toast_以及SharedPreferences---Android原生开发工作笔记149
  6. Android 实例解说Application类
  7. mysql索引级别快慢_面试小点-MySQL 的两种索引方法如何提高查询速度
  8. shell中 if else以及大于、小于、等于逻辑表达式介绍
  9. XAF How to: Implement Domain Components(如何实现领域构件)
  10. 灵格斯 Lingoes 2.8 去广告 禁止新词锐词弹窗
  11. Statistics Pro for Mac(统计学软件)
  12. 南京航空航天大学陈松灿教授访谈
  13. typora免费将图片上传到CSDN
  14. 常用PHP开发工具都有哪些(2021整理)
  15. 程序员不好好写报告的结果是很严重的
  16. 操作系统——吸烟者问题
  17. 黑崎一护为什么没有和朽木露琪亚在一起
  18. hadoop分布式安装部署具体视频教程(网盘附配好环境的CentOS虚拟机文件/hadoop配置文件)...
  19. 如何正确关闭MongoDB
  20. c语言实验心得100字,实验心得100字_100个面试常见经典问题_100个面试问题和答案...

热门文章

  1. Java,想说爱你真不容易
  2. centos7 git安装
  3. 《MonoTouch开发实践指南》一1.2 创建MonoTouch应用程序
  4. web前端超出两行用省略号表示
  5. 【转载】同步和互斥的POSIX支持(互斥锁,条件变量,自旋锁)
  6. (HttpURLConnection)强制转化
  7. 挺水的一门课,发现全系都过了,就自己挂了,这是一种什么样的感觉呢?
  8. chkconfig的用法
  9. iftop 流量监控
  10. Hierarchy-Viewer架构