题面(from luogu)
自然数的拆分
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
输入格式:
输入:待拆分的自然数n。
输出格式:
输出:若干数的加法式子。
样例.in
7
样例.out
1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+2+2
1+2+4
1+3+3
1+6
2+2+3
2+5
3+4
题目分析
这是一道很典型的DFS题,针对题目,我们可以设较多的形参,以便使用,同时,也要注意重复的情况
大体框架
void search(int k,int total,int now); //k表示找到那一个位置了,total是目前累和的情况,now是当前拆分到的数
{
if (total == n) 输出 //total==n,即是拆出的数相加同原数大小,输出
else //反之,继续找