题目的意思就一个程序员.他住在一条街.这条街的房子编号从1到n,他住在第m号房子,他要求自己的房子往左的号码加起来,等于往右的号码加起来(不包括自己)
那么的到
1+2+3.....+m-1 == (m + 1 ) +(m + 2)......(m + n - m);
左边等于m(m-1)/2
右边等于(m+1+n)(n-m)/2;
化完变成m = sqrt( n(n + 1) / 2);
然后我们遍历n算出它对应的m,如果m是整数,则可以.
判断整数的办法是mm 是 m 的向下取整.
如果mm - m < 1e-10 就说明m是整数.
AC代码:
#include<stdio.h>
#include<math.h>
const long long N = 69528162;
int main () {
int k = 0;
double temp;
for (long long i = 2 ; i < N ;i++) {
double flag = (double)i;
double flag1 = sqrt(flag * (flag + 1) / 2);
long long m = flag1;
if((flag1 - m) < 1e-10) {
printf("%10lld%10lld\n",m ,i);
}
}
}