题目

题目描述

2005年的百度之星初赛有这么一道题,一个正整数有可能可以被表示为 m(m>1) 个连续正整数之和,如:

15=1+2+3+4+5
15=4+5+6
15=7+8

但现在你的任务是判断给定的整数n能否表示成连续的m(m>1)个正整数之和。

解答要求

时间限制:1000ms, 内存限制:100MB

输入

输入只有一个整数n (1<n<230 +1)。

输出

若n能表示成连续的m(m>1)个正整数之和则输出“YES”,否则输出“NO”。

解题思路

分析:Java递归

  1. 初看这道题时,只觉得不需思考,循环就可以解决

    思路:嵌套循环,逐项相加,当前n项和大于目标值,则减去左侧小的值使和小于目标值,再继续如此,直到等于目标值或循环结束。

    最终在百万级别超时。
  2. 此时意识到双重循环耗时严重,需分析算法再进行求解

    思路:连续数相当于等差数列,差为1,利用前n项和公式,使其等于目标值,根据项数不同,只要能求出首项为整数即可。

    最终在十亿级别超时。
  3. 终于,这个数量级已经不是循环能搞定的了,必须在数学层面想点别的招了

    思路:

    奇数,一个奇数n可表示为(n+1)/2,(n-1)/2.所以奇数必然可以写成连续数。奇数的倍数是只需要在原有奇数序列两端不停的+1-1即可,直到左侧最小数变成0,此时为(n-n)/2,同时可以发现最大数为n,此时连续个数=奇数值,以后无论多少倍,在基础上加相应倍数即可。(例7:3,4 翻倍14:2,3,4,5 再翻28:0,1,2,3,4,5,6,7 此时除去0,个数与奇数值相同,无论在以后怎么加都ok)

    那就简单了,目标数字能够除以2,最终是奇数即可(除了1),你想想是不是只有2的n次方不满足条件。

    所以这道题的意义就是判断输入是否为2的n次方。
public class Main {
public static void main(String[] args) {
System.out.println(method(new Scanner(System.in).nextInt()));
} private static String method(int num){
if(num == 1){
return "NO";
}
if(num %2 !=0 ){
return "YES";
}
return method(num/2);
}
}

日行一算(Consecutive Integer-连续整数)的更多相关文章

  1. 日行一算(Vowel-大小写转换)

    题目 题目描述 solo从小就对英文字母非常感兴趣,尤其是元音字母(a,e,i,o,u,A,E,I,O,U),他在写日记的时候都会把元音字母写成大写的,辅音字母则都写成小写,虽然别人看起来很别扭,但是 ...

  2. 日行一算(Table-文字输出)

    题目 +---+---+---+ | | | | +---+---+---+ | | | | +---+---+---+ | | | | +---+---+---+ 题目描述 上图是一个Mysql查询 ...

  3. 3月3日(5) Roman to Integer

    原题 Roman to Integer 题意很简单,把Roman字母翻译成int. 实现方式也不难,针对每个字符转成int,从右往左,依次判断,如果当前值比上一个值大则相加,小则相减. 什么,你问我怎 ...

  4. android 股票数据通过日K获取周K的数据 算法 源码

    目前的数据是从新浪接口获取的, http://biz.finance.sina.com.cn/stock/flash_hq/kline_data.php?symbol=sh600000&end ...

  5. Integer Numbers

    ZOJ Problem Set - 3365 Integer Numbers Time Limit: 1 Second      Memory Limit: 32768 KB      Special ...

  6. ZOJ 3365 Integer Numbers

    Integer Numbers Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on ZJU. Origina ...

  7. python学习笔记比较全

    注:本笔记基于python2.6而编辑,尽量的偏向3.x的语法 Python的特色 1.简单 2.易学 3.免费.开源 4.高层语言: 封装内存管理等 5.可移植性: 程序如果避免使用依赖于系统的特性 ...

  8. Servlet 教程——检视阅读

    Servlet 教程--检视阅读 参考 Servlet教程--菜鸟--蓝本 Servlet教程--w3cschool Servlet教程--易百 servlet依赖maven依赖: <!--se ...

  9. 学习SQLite之路(四)

    20160621 更新 参考: http://www.runoob.com/sqlite/sqlite-tutorial.html 1. SQLite   alter命令:不通过执行一个完整的转储和数 ...

随机推荐

  1. 彻底剖析JVM类加载机制

    本文仍然基于JDK8版本,从JDK9模块化器,类加载器有一些变动. 0 javac编译 java代码 public class Math { public static final int initD ...

  2. 原生JS获取网页宽高

    网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: document.body.offset ...

  3. 园子的推广博文:欢迎收看 Apache Flink 技术峰会 FFA 2021 的视频回放

    园子专属收看链接:https://developer.aliyun.com/special/ffa2021/live#?utm_content=g_1000316459 Flink Forward 是 ...

  4. Java 内幕新闻第二期深度解读

    这是由 Java 官方发布,Oracle JDK 研发 Nipafx 制作的节目,包含 JDK 近期的研发进展和新特性展望和使用,这里加上个人译制的字幕搬运而来.我把 Nipafx 的扩展资料详细研读 ...

  5. Genymotion安装apk问题,不能部署Genymotion-ARM-Translation_v1.zip

    把Genymotion-ARM-Translation_v1.zip拖进去提示 Files successfully copied to: /sdcard/Download 但还是不能安装apk 解决 ...

  6. 如何使用 GitHub Pages 维护自己的博客

    目录 前置知识 实际操作 声明 本文地址:如何使用 GitHub Pages 维护自己的博客 前置知识 首先,你应该知道如何用 Hexo 在本地搭建一个博客系统,具体见 Hexo. 其次,我们如果想使 ...

  7. 《剑指offer》面试题30. 包含min函数的栈

    问题描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1).   示例: MinStack minSt ...

  8. 利用SelectPdf插件将网页生成PDF

    简介 适用于.NET Framework和.NET Core的HTML至PDF转换器 SelectPdf提供的在线html到pdf转换器使用.NET的Select.Pdf库中的html到pdf转换器. ...

  9. Nginx怎么处理请求的?

    nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的 location,location就是实际地址.   server { # 第 ...

  10. Linux身份鉴别机制原理

    传统的UNIX身份鉴别机制原理 传统的UNIX身份鉴别即口令认证方式,它主要通过识别用户的用户名或者UID号获取在/etc/shadow中存放的对应用户密码密文等信息,然后获取用户输入密码并采用cry ...