题目:输入一个正数n,输出所有和为n连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
解题思路:首先,要找的肯定是小于等于n/2+1的数。那么我们就可以从n/2+1开始向下每个数递归寻找,如果找到合适的情况,那么久输出即可。递归的时候,每次递归都是向下减一即可。
代码:
//输入一个正数n,输出所有和为n连续正数序列。 #include <stdio.h> int Sum(int n,int m); int main() { int n,ret,i; scanf("%d",&n); for (i = n/2+1; n >= 1; i--) { if ((ret=Sum(n,i))) { printf("%d-%d\n",ret,i); } } } int Sum(int n, int m) { if (n == 0) { return m+1; } else if (n < 0) { return 0; } return Sum(n-m,m-1); }
2013/5/29 16:00