蓝桥杯 算法训练 连续正整数的和

来源:互联网 发布:linux离线安装ruby 编辑:程序博客网 时间:2024/05/30 04:13
问题描述
  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

#include <stdio.h>  
  
int main()  
{  
    int n, a, b, sum;  
      
    scanf("%d", &n);  
      
    a = 1;  
    b = a + 1;  
    sum = 0;  
    while(b != a+1 || sum < n){  
          
        if(sum < n){  
            b ++;  
        }else{  
            a ++;  
            b = a + 1;  
        }  
        sum = (a + b) * (b - a + 1) / 2;  
        if(sum == n){  
            printf("%d %d\n", a, b);  
        }  
    }  
      
    return 0;     
}  

0 0