算法训练 连续正整数的和

问题描述
  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
测试代码
 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int n, sum = 0;
 6     int a = 1, b = a + 1;
 7     scanf("%d", &n);
 8     while (b != a + 1 || sum < n)
 9     {
10         if (sum < n)
11         {
12             b++;
13         }
14         else
15         {
16             a++;
17             b = a + 1;
18         }
19         sum = (a + b) * (b - a + 1) / 2;
20         if (sum == n)
21         {
22             printf("%d %d\n", a, b);
23         }
24     }
25     return 0;
26 }

 

posted @ 2016-05-25 16:45  新生代黑马  阅读(444)  评论(0)    收藏  举报