题目描述:一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列
输入数据:一个正整数,以命令行参数的形式提供给程序。 输出数据:在标准输
出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小
正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大
小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没
有符合要求的序列,输出“NONE”。
例如,对于15,其输出结果是:
1 2 3 4 5
4 5 6
7 8
对于16,其输出结果是:
NONE
评分标准:程序输出结果是否正确。
#include <iostream>
using namespace std;
#include <math.h>
void find(int inter);
void main()
{ int s;
cout<<"please enter an integer"<<endl;// 输入整数
cin>>s;
find(s);
}
void find(int inter)
{
float start;
int max=sqrt(inter*2);
int cnt=0;
for(int n=max;n>1;n--){
start=(float)inter/n-(float)(n-1)/2;
if(start==(int)start)
{ cnt++;
int i=0;
while(i++<n)
cout<<start++<<" ";
cout<<endl;}
}
if(cnt==0)
cout<<"NONE"<<endl;
}