今天看到關於一個整數表示為n個連續整數和的問題。搜索了下找到如下文章:
還搜索到程序的實現: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;
}