表正整数n为连续整数的条件和方法

今天看到关于一个整数表示为n个连续整数和的问题。搜索了下找到如下文章:

表为连续正整数
View SlideShare document or Upload your own.

还搜索到程序的实现:http://blog.csdn.net/Solstice/archive/2006/09/13/1217700.aspx

http://squall.cs.ntou.edu.tw/cprog/Assignments/99Fall/FindGivenSum.html

http://blog.chinaunix.net/u2/76292/showart_1359876.html(这个是不正确的)

 

我也简单的实现了下:(g++编译,主要思路是利用等差数列求和公式n=(a+a+k)*(k+2)/2列举k,找到合适的a)

#include <iostream>
#include <math.h>
using namespace std;

int main(){

    int n;
    cout<<"input n:"<<endl;
    cin>>n;

    int maxk=(int)sqrt((double)n*2);

    int flag = 0;

    //cout<<"maxk="<<maxk<<endl;

    //for(int i=1;i<maxk+1;i++){
    for(int i=maxk+1;i>0;i--){
         double a = n/(double)(i+1)-i/(double)2;
        //cout<<"a="<<a<<endl;
    
        if(a>0&&a-(int)a==0){
            //cout<<i<<endl;
            for(int j=0;j<i+1;j++){
                cout<<a+j<<" ";
            }
            cout<<endl;
            flag=1;
        }

    }
    if(flag==0){
        cout<<"NONE"<<endl;
    }
    return 0;

}

你可能感兴趣的:(表正整数n为连续整数的条件和方法)