void search(int t) //t: 第几次选择
{
for(int i=1;i<=/*阈值*/;i++){
if(/*t没有被选中过*/){
//选中并保存目标(标记该目标为已经查看并且保存至答案数组)
if(/*t达到阈值*/){
//输出整个结果数组(遍历输出)
}else{
search(t+1); //search自增调用
//回退状态和结果(和选中并保存结果正好相反)
}
}
}
}#include<bits/stdc++.h>
using namespace std;
#define m 2147483647
int result[1000]={1};
int n=0,s;
int total=0;
void search(int t){
// cout<<n<<","<<s;
for(int i=result[t-1];i<=s;i++){
if(i<n){
//Bypass select
s-=i;
result[t]=i;
if(s==0){
for(int j=1;j<=t;j++){
cout<<result[j]<<"+";
}cout<<"\b \b";cout<<"\r\n";total+=1;
}else{
search(t+1);
}s=s+i;result[t]=1;
}
}
}
int main()
{
//write
cin>>n;s=n;
search(1);
cout<<"\n\nTotal:"<<total;
return 0;
}↑一道例题:任何一个大于一的自然数可以差分成若干小于n的自然数之和,解题过程
#转载请注明出处!