(遞迴)整數分解為若干項之和
阿新 • • 發佈:2019-01-05
輸入樣例:
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的執行過程,部分截圖
這個不好理解,再看看。。。。