北航12年上机复试

来源:互联网 发布:淘宝的宝贝怎么上传 编辑:程序博客网 时间:2024/04/29 08:39

12年上机题

1.【问题描述】

某些整数能分解成若干个连续整数的和的形式,例如
    15 = 1 + 2+3+4+5 
    15 = 4 + 5 + 6
    15 = 7 + 8
某些整数不能分解为连续整数的和,例如:16
输入:一个整数N(N <= 10000)
输出:整数N对应的所有分解组合,按照每个分解中的最小整数从小到大输出,每个分解占一行,每个数字之间有一个空格(每行最后保留一个空格);如果没有任何分解组合,则输出NONE。

解题:

一个数至少是2个数构成,所以只需从1查找到n/2,然后以这个数开始每次加一并求和,当总和不小于N时看是否相等,注意最开始要写一个found 判断是否存在这样的分解。

#include <stdio.h>#include <string.h>#define maxn 1000int main(){    int n ;    while(scanf("%d",&n)){        int found = 0 ;        for ( int i = 1 ; i <= n/2 ; i ++ ){            int sum = 0 ;            int temp = i ;            while ( sum < n ){                sum += temp;                temp ++;            }            if ( sum == n)            {                found = 1;                printf("%d = ",n);                for ( int j = i ; j < temp - 1 ; j ++)                    printf("%d + ",j);                printf("%d \n",temp-1);            }        }        if (found == 0)            printf("NONE\n");    }return 0;}


0 0
原创粉丝点击