c語言實現,一定數量一定範圍內的整數相加總和相等的整數數列

實現方法採用回調函數的方式實現,模仿模型爲密碼破解的方法,在產生的結果中,會有一些是重複的,可以採用文件的方式去掉重複即可,這邊只實現產生所以可能性的方法。

代碼如下:

#include "stdio.h"


#define NUMBER_SUM     4  //多少個相加的數
#define NUMBER_MIX     48  //相加數的最小值
#define NUMBER_BASE    5  //相加數的最下值和最大值之間的差值
#define ADD_SUM        200 //相加的總和


int numberS[NUMBER_SUM];
int countSum = 0;


void numberInit()
{
    int i = 0;

    for(i = 0; i < NUMBER_SUM; i++)
    {
        numberS[i] = NUMBER_MIX;
    }
}


int numberSumAdd()
{
    int i = 0;
    int sum = 0;

    for(i = 0; i < NUMBER_SUM; i++)
    {
        sum = sum + numberS[i];
    }
    return sum;
}

void printNumberData()
{
    int i = 0;

    printf("line %d : ",countSum);
    for(i = 0; i < NUMBER_SUM; i++)
    {
        printf(" %d ",numberS[i]);
    }
    printf("\n");
}


void numberAdd(int funcCount)
{
    int i = 0;

    numberS[funcCount] = NUMBER_MIX;
    if(funcCount == (NUMBER_SUM - 1))
    {
        for(i = 0; i < NUMBER_BASE; i++)
        {
            numberS[funcCount] = NUMBER_MIX + i;
            if(ADD_SUM == numberSumAdd())
            {
                countSum++;
                printNumberData();
            }
        }
    }
    else
    {
        funcCount++;
        for(i = 0; i < NUMBER_BASE; i++)
        {
            numberS[funcCount - 1] = NUMBER_MIX + i;
            numberAdd(funcCount);
        }
    }
}

int main()
{
    printf("----------------start---------------\n");
    numberInit();
    numberAdd(0);

    printf("-----------------end-----------------\n");
    return 0;
}


結果如下:

----------------start---------------

line 1 : 48 48 52 52

line 2 : 48 49 51 52

line 3 : 48 49 52 51

line 4 : 48 50 50 52

line 5 : 48 50 51 51

line 6 : 48 50 52 50

line 7 : 48 51 49 52

line 8 : 48 51 50 51

line 9 : 48 51 51 50

line 10 : 48 51 52 49

line 11 : 48 52 48 52

line 12 : 48 52 49 51

line 13 : 48 52 50 50

line 14 : 48 52 51 49

line 15 : 48 52 52 48

line 16 : 49 48 51 52

line 17 : 49 48 52 51

line 18 : 49 49 50 52

line 19 : 49 49 51 51

line 20 : 49 49 52 50

line 21 : 49 50 49 52

line 22 : 49 50 50 51

line 23 : 49 50 51 50

line 24 : 49 50 52 49

line 25 : 49 51 48 52

line 26 : 49 51 49 51

line 27 : 49 51 50 50

line 28 : 49 51 51 49

line 29 : 49 51 52 48

line 30 : 49 52 48 51

line 31 : 49 52 49 50

line 32 : 49 52 50 49

line 33 : 49 52 51 48

line 34 : 50 48 50 52

line 35 : 50 48 51 51

line 36 : 50 48 52 50

line 37 : 50 49 49 52

line 38 : 50 49 50 51

line 39 : 50 49 51 50

line 40 : 50 49 52 49

line 41 : 50 50 48 52

line 42 : 50 50 49 51

line 43 : 50 50 50 50

line 44 : 50 50 51 49

line 45 : 50 50 52 48

line 46 : 50 51 48 51

line 47 : 50 51 49 50

line 48 : 50 51 50 49

line 49 : 50 51 51 48

line 50 : 50 52 48 50

line 51 : 50 52 49 49

line 52 : 50 52 50 48

line 53 : 51 48 49 52

line 54 : 51 48 50 51

line 55 : 51 48 51 50

line 56 : 51 48 52 49

line 57 : 51 49 48 52

line 58 : 51 49 49 51

line 59 : 51 49 50 50

line 60 : 51 49 51 49

line 61 : 51 49 52 48

line 62 : 51 50 48 51

line 63 : 51 50 49 50

line 64 : 51 50 50 49

line 65 : 51 50 51 48

line 66 : 51 51 48 50

line 67 : 51 51 49 49

line 68 : 51 51 50 48

line 69 : 51 52 48 49

line 70 : 51 52 49 48

line 71 : 52 48 48 52

line 72 : 52 48 49 51

line 73 : 52 48 50 50

line 74 : 52 48 51 49

line 75 : 52 48 52 48

line 76 : 52 49 48 51

line 77 : 52 49 49 50

line 78 : 52 49 50 49

line 79 : 52 49 51 48

line 80 : 52 50 48 50

line 81 : 52 50 49 49

line 82 : 52 50 50 48

line 83 : 52 51 48 49

line 84 : 52 51 49 48

line 85 : 52 52 48 48

-----------------end-----------------

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章