51nod1138(连续和)

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1138

 

题意:中文题诶~

 

思路:假设 x=a1+(a1+1)+...+(a1+n-1)=n*a1+(n-1)*n/2;

所以:a1=(2*x-(n-1)*n)/(2*n);

那么我们只要枚举n就可以啦,接下来我们还有确定n的范围:

x=(a1+an)*n/2=(a1+a1+(n-1)*d)*n/2=(n+1)*n/2; 即(n+1)*n=2*x, 所以n<sqrt(2*x);

又,题目中要求n>=2,所以我们只要枚举n从sqrt(2*x)到2就好啦.....

 

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main(void){
 5     int x;
 6     bool flag=true;
 7     cin >> x;
 8     int i=sqrt(2*x);
 9     while(i>=2){
10         int gg=(2*x-(i-1)*i)/(2.0*i);
11         if(gg==(2*x-(i-1)*i)/(2.0*i)){
12             cout << gg << endl;
13             flag=false;
14         }
15         i--;
16     }
17     if(flag){
18         cout << "No Solution" << endl;
19     }
20     return 0;
21 }

 

posted @ 2017-01-16 16:15  geloutingyu  阅读(179)  评论(0编辑  收藏  举报