2010年中兴面试题
编程求解:
输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来.
这里选择用递归实现比较方便
程序选择用数组记录中间选择数
#include <iostream>
//arr是记录数组,n是输入n,m是输入的m,i是当前数组存储位置
void fuc(int* arr,int n,int m,int i);
int main()
{
int arr[10] = {0};
fuc(arr,10,50,0);
return 0;
}
void fuc(int* arr,int n,int m,int i)
{
if(n == 0);//递归终止的一个条件,即扫描到n为0是结束本轮!
else if (n<m)
{
arr[i] = n ;
fuc(arr,n-1,m-n,++i);
fuc(arr,n-1,m,--i);
}
else if (n>m)
{
fuc(arr,n-1,m,i);
}
else
{
arr[i] = n ;
for (int j=0;j<=i;j++)
std::cout<<arr[j]<<" ";
std::cout<<std::endl;
fuc(arr,n-1,m,i);
}
}