再帰アルゴリズムにより、Mの正の整数の組み合わせを解決

する#include <stdio.hに> 
する#include <STDLIB.H> 

INT合計(INT *バフ、INT LEN)
{ 
    int型の和= 0。
    以下のために(INT i = 0; iがLEN <; iは++){ 
        合計+ =バフ[I]。
    } 
    の和を返します。
} 

ボイドプリント(int型*バフ、INT LEN)
{ 
    (INT i = 0; iがLEN <; iは++){ため
        のprintf( "%dの"、バフ[I])。
    } 
    //のprintf( "の\ n"); 
} 

INTパーマ(INT *バフ、INT * LEN、INT開始、INT M、INT *カウント)
{ 
    int型の和=合計(バフ、* LEN)。
    int型分=((M -合計)<開始)?(M -和):開始。
    以下のために(; I> 0; I = int型分i--){ 
        IF((和+ I)== M){ 
            (*カウント)++;
            印刷(バフ、* LEN); 
            printf( "%d個の\ n"は、i)は、
            持続する; 
        } 

        バフ[* LEN = I。
        (* LEN)++; 

        パーマ(バフ、LEN、I、M、カウント)。
        (* LEN) - 。
    } 
} 

int型のmain()
{ 
    int型バフ[10] = {0}。
    int型のlen = 0; 
    int型のカウント= 0; 
    int型のn; 
    scanf関数( "%のD"、&N); 
    パーマ(バフ、&​​lenは、N、N、&カウント)。
    printf( "N =%dは、=%dは\ nをカウント"、N、カウント)。
    0を返します。
}

  

おすすめ

転載: www.cnblogs.com/felixr/p/11407945.html
おすすめ