您的位置:首页 > 其它

简单搜索(基础)

2017-07-31 20:24 162 查看
任何一个大于1得自然数n,总可以拆分成若干个小于n得自然数之和!

代码:

#include <bits/stdc++.h>
using namespace std;
int a[10001]={1},n,total;
int search(int ,int );
int print(int);
int main()
{
cin>>n;
search(n,1); //将要拆分的数传递给s
cout<<total<<endl;//输出拆分的方案数
}
int search(int s,int t)
{
int i;
for(i=a[t-1];i<=s;i++)
{
if(i<n) //当前数i要大于等于前一位且不超过n
{
a[t]=i;//保存当前拆分得数 i
s-=i; //s减去i,s的值将继续拆分
if(s==0)print(t);//s=0时,拆分结束输出结果
else
search(s,t+1); //当s>0时,继续递归
s+=i; //回溯:加上拆分的数,以便产生所有可能的拆分
}
}
}
int print(int t)
{
cout<<n<<"=";
for(int i=1;i<=t-1;i++)
cout<<a[i]<<"+";
cout<<a[t]<<endl;
total++;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: