1.【问题描述】
某些整数能分解成若干个连续整数的和的形式,例如
15 = 1 + 2+3+4+5
15 = 4 + 5 + 6
15 = 7 + 8
某些整数不能分解为连续整数的和,例如:16
输入:一个整数N(N <= 10000)
输出:整数N对应的所有分解组合,按照每个分解中的最小整数从小到大输出,每个分解占一行,每个数字之间有一个空格(每行最后保留一个空格);如果没有任何分解组合,则输出NONE。
#include <stdio.h> #define TRUE 1 #define FALSE 0 int main() { int integer, i, j, k, sum, flag, group; printf("input a integer to verify, EOF to exit: "); while(scanf("%d", &integer) != EOF) { group = 0; for( flag = FALSE, i = 1; i <= integer/2; ++i ) { for( sum = 0, j = i; sum <= integer; ++j ) { sum += j; if( sum == integer ) { flag = TRUE; ++group; printf("第%d组: ", group); for( k = i; k <= j; ++k ) { printf("%d ", k); } putchar('\n'); } } } if(!flag) printf("NONE\n"); printf("input a integer to verify, EOF to exit: "); } return 0; }
input a integer to verify, EOF to exit: 16 NONE input a integer to verify, EOF to exit: 9 第1组: 2 3 4 第2组: 4 5 input a integer to verify, EOF to exit: 56 第1组: 5 6 7 8 9 10 11 input a integer to verify, EOF to exit: 89 第1组: 44 45 input a integer to verify, EOF to exit: 350 第1组: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 第2组: 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 第3组: 47 48 49 50 51 52 53 第4组: 68 69 70 71 72 第5组: 86 87 88 89 input a integer to verify, EOF to exit: 876 第1组: 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 第2组: 106 107 108 109 110 111 112 113 第3组: 291 292 293
搞定