题目

题目描述

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. vue爬坑之路(webpack 配置篇)

    在vue cli下 1.npm run dev 打开浏览器在config的index.js中修改autoOpenBrowser为true 关闭sourcemap productionSourceMap ...

  2. nefu120梅森素数

    #include<iostream> #include<cstdio> using namespace std; typedef long long ll; const int ...

  3. Jekyll + NexT + GitHub Pages 主题深度优化

    前言 笔者在用 Jekyll 搭建个人博客时踩了很多的坑,最后发现了一款不错的主题 jekyll-theme-next,但网上关于 Jekyll 版的 Next 主题优化教程少之又少,于是就决定自己写 ...

  4. Java 中如何实现线程间通信

    世界以痛吻我,要我报之以歌 -- 泰戈尔<飞鸟集> 虽然通常每个子线程只需要完成自己的任务,但是有时我们希望多个线程一起工作来完成一个任务,这就涉及到线程间通信. 关于线程间通信本文涉及到 ...

  5. LATEX图片位置

    常用选项[htbp]是浮动格式: -『h』当前位置.将图形放置在正文文本中给出该图形环境的地方.如果本页所剩的页面不够,这一参数将不起作用. -『t』顶部.将图形放置在页面的顶部. -『b』底部.将图 ...

  6. Java代码批量插入数据到MySQL

    1.批量插入 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundExc ...

  7. numpy中,从一片c_void_p指向的区域里获取数据

    以前采用的数据拷贝的笨办法: 1 bitmap_size = (1080, 1920, 3) 2 buf = create_string_buffer(bitmap_size[0]*bitmap_si ...

  8. 申请Namecheap的.me 顶级域名以及申请ssl认证--github教育礼包之namecheap

    关于教育礼包的取得见另一篇随笔,在那里笔者申请了digital ocean的vps(虚拟专用主机),跟阿里云差不多,不过个人感觉比阿里云便宜好用一点. 有了自己的主机ip,就想到申请域名,方便好记,也 ...

  9. gorm概述与快速入门

    特性 全功能 ORM 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方 ...

  10. Filter的生命周期及FilterConfig类介绍

    Filter的生命周期包含几个方法 1,构造器方法 2,init初始化方法 第1,2步,在web工程 3,doFilter过滤方法 每次拦截到请求,就会执行 4,destroy销毁方法 停止web工程 ...