Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4828465
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: LINUX

2009-08-25 16:29:26

给定一个输入的正整数X,求出X的所有可以被表示为 n(n>=2) 个连续正整数之和的形式:
如:15=7+8=4+5+6=1+2+3+4+5

 
程序很简单,假设第一个数为a,i为连续的个数
    i*a+i*(i-1)/2 = x;
    解出a = x/i - (i-1)/2>0
x/i>(i-1)/2 i*i<2x

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int exist = 0;
    int x = 0;
    int n;
    int i;
    int a;
    printf("Please input x:");
    scanf("%d", &x);
    for(n = 2; n * n < x * 2; ++ n){
        int a = (2 * x / n - n + 1) / 2;

         /*下面这句也许从数学角度来说是恒等式,这就是程序的妙处^_^,跑一下你就知道了*/
        if( n * a + n * (n - 1) / 2 == x){
            for(i = 0; i < n; ++i)
                printf("%d ", a + i);
            printf("\n");
            exist = 1;
        }
    }
    
    if(!exist)
        printf("none\n");


  system("PAUSE");    
  return 0;
}

阅读(814) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~