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