参考链接:The sum problem
最终AC代码:
#include <cstdio> #include <cmath> //难点一:想到用等差数据求和的思想;难点二:从长度求首项,而不是从首项求长度思想 int main(){ int i, k, n, m; while(scanf("%d %d", &n, &m) != EOF){ if(n==0 && m==0) break; for(k=sqrt(2*m); k>0; k--){ //k是区间的长度 i = (2*m - k*(k-1)) / (2*k); //i表示首项 if(k*i+k*(k-1)/2 == m){ //找到满足条件的区间 printf("[%d,%d]\n", i, i+k-1); } } printf("\n"); } return 0; }
原文:https://www.cnblogs.com/heyour/p/12581345.html