一个数N 怎么描述它可以写成从0(包括0)以后M个连续的自然数之和呢?

来源:百度知道 编辑:UC知道 时间:2024/05/18 01:37:48
N=0+1+2+3+4+5+6+7+.....+M 怎么描述算法
是怎么去判断任意一个数可以写成那样的形式....重在去判断
判断过程的算法

/*
让一个自然数(初值为0),第一次加1,第二次加2……第N次加N,每一步判断它跟给的自然数是否相等,如果相等就可以,否则就是不可以。

另一种就是让给的自然数第一次减1,第二次减2……第N次减N,每一步判断这个自然数是否编程了0.其实这跟上面的是同样的思想。

下面是我写的第一个算法的代码供参考
*/
void fun(int N)
{
int n=0; //定义一个从0依次递增的自然数与N比较
int i=1;
while(N>n) //n曾到比N大时退出
{
n+=i;
i++;
}
if(N==n) //说明N正好可以分解
{
int j;
cout<<N<<"可以分解为连续的自然数之和"<<endl;
cout<<"N=0";
for(j=1;j<i;j++)
cout<<"+"<<j;
cout<<endl;
}
else
cout<<N<<"不可以分解为连续的自然数之和"<<endl;
}

五楼回答的还可以
从零开始没意义好像 不过也没问题
0+1+。。。+n=n*(n+1)/2
所以2N=M(M+1)
求2n的因子 看有没有两个的积为2n 而且是连续的就可以了
int i,n,k;
int ans1,ans2;
k=2*n;
for(i=1;i<sqrt(k);i++)
{

if(k%i==0)
{
ans1=i,ans2=k/i;
if(ans2-ans1==1)