1. 程式人生 > >連續整數的和

連續整數的和

這道題我很悲劇,悲劇的是不會做,悲劇的是別人告訴我怎麼做後,我依舊錯了。

看看題目,其實看不出什麼名堂,也沒感覺他有什麼,我第一方法就是數的列舉

#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    int N,i,j;
    bool flag;
    cin>>N;
    flag=true;
    for(i=1;i<N;i++)
      for(j=i+1;j<N;j++)
        if((i+j)*(j-i+1)/2==N){

            printf("%d\n",i);
            flag=false;
            break;
        }
        else if((i+j)*(j-i+1)/2>N)
              break;
        if(flag)
        printf("No Solution\n");

}

果斷超時,做了半天沒過,找大神,大神果然是大神,幾位大神,連停頓都沒停頓,說列舉長度,

(x+x+L-1)*L=2*S

長度L小於等於sqrt(2*S) x=((2*s)/L+1-L)/2;寫了幾次才水過

#include<stdio.h>
#include<math.h>
int main()
{
    int n,L,i,s;
    bool flag=true;
    scanf("%d",&n);
    n=2*n;
    L=sqrt(n);
    for(i=L;i>=2;i--)
    {
        s=(n/i-i+1);
     if(n%i==0&&s%2==0)
     {printf("%d\n",s/2);flag=false;}
    }
    if(flag)
    printf("No Solution\n");
}