问题描述 78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27。 输入一个正整数 n(<=10000) 输出 m 行(n有m种表示法),每行是两个正整数a,b,表示a+(a+1)+...+b=n。 对于多种表示法,a小的方案先输出。 样例输入 78 样例输出 1 12 18 21 25 27
解题思路:
枚举i=1-n的数
以i为起点,枚举j=i-n的值,并累加j,当加j后的值大于n,跳出
输出i和j-1(j由于在循环中会多加一次),即累加该区间的值可以得到n
AC代码:
1 #include <stdio.h> 2 3 int main(void) 4 { 5 int n; 6 int i,j,k; 7 scanf("%d",&n); 8 for (i = 1 ; i <= n/2 ; i ++) 9 { 10 k = 0;/*用于计算累加值*/ 11 for (j = i ; k+j <= n ; j ++) 12 { 13 k += j; 14 } 15 if (k == n) 16 { 17 printf("%d %d\n",i,j-1); 18 } 19 } 20 21 return 0; 22 }