我们又双叒叕学习了!!!
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
例如当n=7共14种拆分方法:
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
total=14
作者:南昌县莲塘第三中学 https://www.bilibili.com/read/cv13700927/ 出处:bilibili
(题目是复制的啦 嘿嘿)
输入样例
7
输出样例
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
思路嘛:定义个函数f,两个参数,s最开始是0,累加用的,t是数组下标。如果s超了,就会爆掉,所以要回溯回去。如果正好是n那么输出答案,然后继续搜索。
代码来喽
#include<bits/stdc++.h>
using namespace std;
int n,a[110],k=0;
void f(int s,int t)
{
if(s>n)
return;
if(s==n)
{
k++;
cout<<n<<"=";
for(int i=1;i<=t-2;i++)
{
cout<<a[i]<<"+";
}
cout<<a[t-1]<<endl;
}
for(int i=a[t-1];i<n;i++)
{
a[t]=i;
f(s+i,t+1);
}
}
int main()
{
cin>>n;
a[0]=1;
f(0,1);
cout<<"total="<<k;
return 0;
}
如果有错误,希望大家可以及时指出
谢谢大家
看到这了
不妨点个赞,关注一下