这是这个学期的第一次算法作业,书上给出了整数划分的伪代码,作业是将它转化为输出整数划分的具体结果。
感觉用书上的代码改写没什么思路,就用dfs写了。
如果输出答案总数,那么就在输出序列那个地方ans++就行了。
代码:
#include <bits/stdc++.h>
using namespace std;
int n;
int ans[1000];
void out(int len)
{
for(int i=0;i<len;i++)
cout << ans[i] << " ";
cout << endl;
}
void dfs(int pos,int len,int tot)
{
if(tot==n)
{
out(len);
return ;
}
for(int i=pos;i>=1;i--)
{
if(tot+i<=n)
{
ans[len]=i;
dfs(i,len+1,tot+i);
}
}
}
int main()
{
while(cin >> n)
{
dfs(n,0,0);
}
return 0;
}