本文主要是介绍北航12年上机复试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;
}
这篇关于北航12年上机复试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!