最近练习的一些算法(持续更新)

来源:互联网 发布:依存度算法 编辑:程序博客网 时间:2024/06/05 06:05

题目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);}}


 

原创粉丝点击