Alice的面试

作者:糖橘蜜ya
声明:转载请注明出处,谢谢。

题面:

Alice的面试

题解:

分析:
输入一个正整数N(1<=N<=1000000),判断是否存在a到b(a!=b)之间连续求和是否等于N。
显而易见,a到b求和为等差数列求和,差值固定为1,由等差数列求和公式 :

Sn=(a0+an)*n/2

(a0为首项,即本题的 a,an为尾项,即本题的 b,n则为项次)
可知:

N=(a+b)*(b-a+1)/2

由于区间连续求和,可知a<b<=500000。
因此直接遍历。

AC代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    long long n;
    while(~scanf("%lld",&n))
    {
        long long i,j,b,x,flag=0;
        if(n<=2)  //n<2时无
        {
            cout<<"NO"<<endl;
            continue;
        }
        for(i=1; i<50000; i++)
        {
            for(j=i+1; j<=50000; j++)
            {
                if(n==((i+j)*(j-i+1)/2))
                {
                    cout<<i<<" "<<j<<endl;
                    flag=1;
                    break;
                }
                if(i>=n)
                {
                    flag=2;
                    break;
                }
                if(j>=n)
                    break;
            }
            if(flag)
                break;
        }
        if(flag!=1)
            cout<<"NO"<<endl;
    }
    return 0;
}

呐呐呐,糖糖开心的一天~~

相关文章:

  • 2022-01-02
  • 2021-12-27
  • 2021-10-10
  • 2022-02-21
  • 2022-01-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-13
  • 2021-12-06
  • 2021-08-21
  • 2021-09-25
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案