實現方法採用回調函數的方式實現,模仿模型爲密碼破解的方法,在產生的結果中,會有一些是重複的,可以採用文件的方式去掉重複即可,這邊只實現產生所以可能性的方法。
代碼如下:
#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-----------------