给定一个输入的正整数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) |