整数拆分
将一个正整数拆分成若干个正整数的和。
输入格式:
一个正整数n
输出格式:
若干行,每行一个等式(每个数或者等号间都有一个空格,第一个数前没有空格,最后一个数后面没有空格,数与数之间要求非降序排列)。最后一行给出解的总个数
输入样例:
在这里给出一组输入。例如:
4
输出样例:
在这里给出相应的输出。例如:
4 = 1 + 1 + 1 + 1
4 = 1 + 1 + 2
4 = 1 + 3
4 = 2 + 2
4
#include<iostream>
using namespace std;
int n, * m, count=0;
void backtrack(int k,int v)
{
int i;
if (k == 0)
i = 1;
else i = m[k - 1];
for (;i<n; i++)
{
if (v + i < n)
{
m[k] = i;
backtrack(k + 1, v + i);
}
else if (v + i == n)
{
m[k] = i;
cout << n << " = ";
for (int i = 0; i < k; i++)
{
cout << m[i] << " + ";
}
cout << m[k] << endl;
::count++;
break;
}
else break;
}
}
int main()
{
cin >> n;
m = new int[n];
backtrack(0,0);
cout << ::count << endl;
return 0;
}