iNVAiN

博客园 首页 新随笔 联系 订阅 管理

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

搞定

posted on 2013-03-07 18:37  iNVAiN  阅读(198)  评论(0)    收藏  举报