(递归)整数分解为若干项之和
程序员文章站
2022-03-13 16:46:29
...
输入样例:
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;7=7
#include<iostream>
using namespace std;
int a[31], sum, cnt, top = -1;
void f(int i, int n)
{
int k, j;
if(sum == n)
{
cnt++;
cout<<n<<"=";
for(k = 0; k < top; k++)
cout<<a[k]<<"+";
if(cnt % 4 == 0 || a[top] == n)
cout<<a[top]<<endl;
else cout<<a[top]<<";";
return ;
}
if(sum > n) return ;
for(j = i; j <= n; j++)
{
a[++top] = j;
sum += j;
f(j, n);
sum -= j;//回溯
top--;//回溯
}
}
int main()
{
int n;
cin>>n;
f(1, n);
return 0;
}
6的执行过程,部分截图
这个不好理解,再看看。。。。
下一篇: ViewModelSaveState