WooKinson

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
问题描述
  78这个数可以表示为连续正整数的和,1+2+318+19+20+2125+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 }

 

posted on 2018-04-19 19:55  WooKinson  阅读(176)  评论(0编辑  收藏  举报