全部博文(930)
分类: C/C++
2008-11-04 21:43:33
题目描述:一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和,如: 15=1+2+3+4+5 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。 输入数据:一个正整数,以命令行参数的形式提供给程序。 输 出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序 列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出 “NONE” 。 例如,对于 15 ,其输出结果是: 评分标准:程序输出结果是否正确。
|
ubuntuer2009-08-30 09:48:27
我自己是跑过了的,是对的!!!! 这题是N久之前写的了,看这个 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");