题目地址
** 在等差数列下,对于某数s,在某个长度下的和相等,那么有且只有一个。**
代码
#include <iostream>
#include <cstdio>
//事实上,每个长度如果可以相等,那么有且只有一个可能使该长度的值与M是相等的。
using namespace std;
int main() {
int N, M;
while(scanf("%d %d", &N, &M) != EOF && N && M) {
int max_length = 0;
int sum = 0;
for(int i = 1; i <= N; i++) {
if(sum >= M) {
break;
}
max_length++;
sum += i;
}
//cout << max_length << endl;
for(int i = max_length; i > 0; i--) {
int first = (2 * M / i - i + 1) / 2; //有可能得到的是一个浮点数。所以下一步需要继续if。
//cout << first << endl;
if((2 * first + i - 1) * i / 2 == M)
printf("[%d,%d]\n", first, first + i - 1);
}
cout << endl;
}
return 0;
}