编程之美 2.21 只考加法的面试题

任意给一个正整数N,写出N可以表示成连续自然数加和的所有可能。。

比如,输入整数253.

253=126+127

253=18+19+。。+28

253=1+2+。。22

经分析,

i为奇数时候,if(N%i)==0,则N可以写成连续i个数相加

i为偶数时候,if(N%i)==i/2,则N可以写成连续i个数相加。

代码如下:

#include "stdafx.h"
#include<iostream>
#include<stdio.h>
#include<malloc.h>
#include"myheader.h"
using namespace std;


//BOP 2.21

void ContinuePlus(int num)
{
    for(int i=2;i<num/2;i++)
    {
        if( i % 2 == 1 && num%i == 0)
        {
            if(num/i-i/2>0)
            {
                cout<<(num/i-i/2)<<" ~ "<<(num/i+i/2)<<endl;
            }
        }
        if( i % 2 == 0 && num%i == i/2)
        {
            if(num/i-i/2+1>0)
            {
                cout<<(num/i-i/2+1)<<" ~ "<<(num/i+i/2)<<endl;
            }
        }
        
    }
}


void main()
{
    ContinuePlus(253);//参数输入整数N
}

问题2:

2^N不行,根据上面的性质。

问题3:…还没懂,囧

转载请标明:http://www.cnblogs.com/Dzhouqi/p/3616628.html

posted @ 2014-03-21 19:59  joey周琦  阅读(395)  评论(0编辑  收藏  举报