UVA138 - Street Numbers(等差数列)
题目大意:找十组这样的数(a,b) 满足 1到a-1的和等于 a + 1到b的和。
解题思路:根据等差数列的性质可以得到:a (a - 1) == (a + 1 + b) (b - a)化简得
b^2 + b - 2a^2 = 0; 这样b = (sqrt(1 + 8a^2) - 1) / 2;
代码:
#include <cstdio>
#include <cstring>
#include <cmath>
typedef long long ll;
const int maxn = 10;
int main () {
ll a = 1;
double b;
int cnt = 0;
while (cnt < maxn) {
a++;
b = (sqrt(a * a * 8 + 1.0) - 1) / 2;
if (b == floor(b)) {
printf ("%10lld%10.0lf\n", a, b);
cnt++;
}
}
return 0;
}