任何一個大於1的自然數n,總可以拆分成若干個小於n的自然數之和。


任何一個大於 1 的自然數 n ,總可以拆分成若干個小於 n 的自然數之 和。
n=7 14 種拆分方法:
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
total=14
 
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
int a[100000]={1};int n,tot;
void dfs(int,int);
void print(int);
int main()
{
    cin>>n;
    dfs(n,1);
    cout<<"total="<<tot;
    return 0;
}
void dfs(int p,int q)
{
    int i;
    for(i=a[q-1];i<=p;i++)
    {
        if(i<n)
        {
            a[q]=i;
            p-=i;
            if(p==0)print(q);
            else dfs(p,q+1);
            p+=i;
        }
    }
}
void print(int j)
{
    tot++;
    cout<<n<<"=";
    for(int i=1;i<=j;i++)
    {
        if(i!=j)
        cout<<a[i]<<"+";
        else cout<<a[i];
    }
    cout<<endl;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM