作者:haykey(原博客地址:http://blog.csdn.net/haykey/archive/2008/10/29/3175373.aspx)
 
最近时日,从dangdang买了本MARA众高人写的《编程之美》,里面有这么一道题,其中并没有给出问题的解答。一时兴起,就在电脑前动了动手,特献丑与此。BTW,《编程之美》应该是每一位热爱编程技术的IT从业人员桌案边必备的好书。当我还在沉浸于找出问题的解决方案时,MARA的大侠找出了N个解,并且寻求最优解。他们把一个看似复杂的问题可以很快地简单化,找出数学模型,并编程实现。Keep fighting!!!

[question]
我们知道:1+2=3;
              4+5=9;
              2+3+4=9;
等式左边都是两个以上连续的自然数相加,那么是不是所有的整数都可以写成这种形式呢?
写一个程序,对于一个32位正整数,输出它所有的连续自然数之和的算式。

[analysis]
可以发现任意自然数序列其实是公差为1的等差数列,那么数列前N项和公式有a1*n +n*(n-1)/2 = sn,而这里sn = 输入的正整数input。通过分析a1只需在集合[1,input/2)中,把上式等效变形为n2+(2a1-1)n-2input = 0,n的取值为中学学得2a分之负b加减根号下b方减4ac,哈,如果n为一个正整数,那么符合条件输出。如何判断n为合法的正整数不是浮点数呢?看看我的solution吧。我算法的时间复杂度是O(N)线形级别的,不知哪位大虾的solution可以再快些。

[answer-programme]
#include "stdafx.h"
#include <math.h>
#include <iostream.h>

bool isPositiveInt(float num)
{
return (num - (int)num)==0?true:false;
}

void outputResult(int a1,float n,int input)
{
  int loopCounter = 1;
  int a = a1;

cout<<a1;
 
  while(loopCounter<(int)n)
  {
     cout<<"+"<<a1+loopCounter++;
  }//while
 
  cout<<"="<<input<<endl;
}

int main(int argc, char* argv[])
{
unsigned int input,i;

//input any positive numbers you want to calculate with
cout<<"input any positive numbers you want to calculate with:"<<endl;
        cin>>input;

//O(n)
cout<<endl<<"the possible data groups are"<<endl;

float temp;
for(i=1;i<=input/2;i++)
{
    temp = sqrt(8*input+(i+i-1)*(i+i-1));//b*b - 4ac
    temp = (1 + temp - i - i)/2;

if(isPositiveInt(temp))
    {
       outputResult(i,temp,input);
    }
}

return 0;
}

转载于:https://www.cnblogs.com/bvbook/archive/2008/11/18/1335742.html

《编程之美》读书笔记(十二):“只考加法的面试题”相关推荐

  1. 编程之美 - 读书笔记 - 卖书折扣问题的贪心解法

    <编程之美>读书笔记(四):卖书折扣问题的贪心解法 每 次看完<编程之美>中的问题,想要亲自演算一下或深入思考的时候,都觉得时间过得很快,动辄一两个小时,如果再把代码敲一遍的话 ...

  2. 《Java编程思想》读书笔记(二)

    三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第一章到第十章的内容,这一次记录的是第 ...

  3. 【Java编程思想】读书笔记(二)第六章---第十章

    Java编程思想(第四版)学习笔记 第六章---第十章 第六章:访问权限控制 6.2Java访问权限修饰词 第七章:复用类 7.1 组合语法 7.2 继承语法(extends) 7.4.2名称屏蔽(重 ...

  4. 编程之美读书笔记2.1—求二进制数中1的个数

    解法一: 可以举一个8位二进制的例子.对于二进制操纵,我们除以一个2,原来数字就会减少一个0(向右移一位).如果除的过程中有余,那么久表示当前位置有一个1. 以10100010为例: 第一次除以2时, ...

  5. 《Programming in Lua 3》读书笔记(十二)

    日期:2014.7.14 PartⅡ Object-Oriented Programming Lua中实现面向对象编程. "如同OOP对象,table拥有状态:如同OOP对象,table拥有 ...

  6. 中国象棋将帅问题java_编程之美读书笔记1.2——中国象棋将帅问题

    http://blog.csdn.net/pipisorry/article/details/36380669 问题:下过中国象棋的朋友都知道,双方的"将"和"帅&quo ...

  7. JAVA面向对象编程(孙卫琴)读书笔记(二)

    九.抽象 抽象是指从特定的角度出发,把以及存在的事物抽取我们所关注的东西,形成一个新的事物的思维过程. 抽象思维在艺术和科学领域上得到了广泛的运用,例如:一幅在干旱大地突然下起大雨的抽象画,其对真实世 ...

  8. 编程之美读书笔记之-高效率的安排见面会

    问题一: n个同学,分别对m个招聘见面会感兴趣.为了满足所有学生的要求,hr希望让每个同学都能参加自己所有感兴趣的见面会.然后每个见面会的时间为t.问如何安排见面会能够使得所有见面会总的时间最短. 建 ...

  9. 《java编程思想》读书笔记(二)第五章(2)

    成员初始化 Java尽力保证:所有变量在使用前都能得到恰当的初始化. 对于方法的局部变量,Java会以编译时报错的形式贯彻这种保证,比如: 1 void f() 2 { 3 int i; //这里编译 ...

最新文章

  1. 介绍Zabbix的两种监控模式(主动模式和被动模式)
  2. 如何启用ruler?
  3. leetcode(1)---两数之和
  4. python制作文本编辑器_Python小实战:制作文本编辑器
  5. atom插件安装方法
  6. git push origin master 出错
  7. FreeMarker中文API手冊(完整)
  8. 腾讯2014在广州站实习生offer经验(TEG-开发背景)
  9. word模板生成利器poi-tl
  10. GMM R语言程序 gmm包的使用
  11. 四元数——概念以及相关数学公式 实现绕坐标轴旋转以及获取旋转角和旋转轴
  12. 连续多帧图像光流对齐和光流运动检测
  13. java 获取当天的0点和24点
  14. 江苏高考可以用计算机嘛,2018江苏高考计算机网上评卷考生作答须知
  15. kernel Damon实现
  16. AI学习 Day06 内置函数
  17. clover删除多余引导_clover如何删除无用启动项_常见问题解析,clover
  18. Google账户二次验证取消
  19. web前端开发零基础入门教程
  20. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 部分题解

热门文章

  1. Yarn application has already ended! It might have been killed or unable to launch application master
  2. wine的sys文件具体位置
  3. windows7下面sublime中使用virtualenv切换python版本并运行
  4. 机器学习(三十三)——价值函数的近似表示
  5. python指定变量类型_Python#160;变量类型_python教程
  6. 家庭接入: dsl 电缆ftth 拨号和卫星_家庭宽带的路由器升级之路
  7. MySQL学习笔记(二):MyISAM 存储引擎
  8. 【前端面试】数据类型与类型检测
  9. Android性能调优利器StrictMode
  10. mybatis--MapperProxy事务