题目1:给出一个正整数n,把n写成若干正整数相加,要求给出所有写法,比如n=4,输出
4=1+1+1+1
4=1+1+2
4=1+3
4=2+2
4=4
简单的递归算法:
#include<iostream>
#include<vector>
using namespace std;
int inputNumber;
void printResult(vector<int>& resultVector)
{
cout<<inputNumber<<"="<<resultVector[0];
for(int i=1;i<resultVector.size();i++)
cout<<"+"<<resultVector[i];
cout<<endl;
}
void composite(int number,int preFactor,vector<int>& resultVector)
{
if(number==0)
{
printResult(resultVector);
return;
}
if(number<preFactor)
return;
for(int i=preFactor;i<=number;i++)
{
resultVector.push_back(i);
composite(number-i,i,resultVector);
resultVector.pop_back();
}
}
int main()
{
vector<int> resultVector;
while(cin>>inputNumber)
{
if(inputNumber==0) break;
composite(inputNumber,1,resultVector);
}
}
题目变种:给出一个正整数N,把它写成若干整数相乘的形式:
解法同上:
#include<iostream>
#include<vector>
using namespace std;
int inputNumber;
void printResult(vector<int>& resultVector)
{
if(resultVector.size()==1)
cout<<inputNumber<<"=1*"<<resultVector[0];
else
{
cout<<inputNumber<<"="<<resultVector[0];
for(int i=1;i<resultVector.size();i++)
cout<<"*"<<resultVector[i];
}
cout<<endl;
}
void composite(int number,int preFactor,vector<int>& resultVector)
{
if(number==1)
{
printResult(resultVector);
return;
}
if(number<preFactor)
return;
for(int i=preFactor;i<=number;i++)
if(number%i==0)
{
resultVector.push_back(i);
composite(number/i,i,resultVector);
resultVector.pop_back();
}
}
int main()
{
vector<int> resultVector;
while(cin>>inputNumber)
{
if(inputNumber==0) break;
composite(inputNumber,2,resultVector);
}
}