例如:
173+286=459
就是一种组合
请问一共有多少组合呢?注:173+286=459 与286+173=459是一种组合!
# include <iostream>
using namespace std;
# define N 11 //几位数
int X, Y, Z, SUM = 0;
void DFS(int A[2][N], int step);//A为二维数组 初始化为0 M为A种用的数组长度 step用于递归
int main() {
int A[2][N] = { 0 };//A[0]存放数字 A[1]存放标志
DFS(A, 1);
cout<<SUM;
return 0;
}
void DFS(int A[2][N], int step)//递归
{
int i;
if (step == 10) //如果前M个已经排好 此时赢直接输出 并停止递归
{
X = A[0][1] * 100 + A[0][2] * 10 + A[0][3];
Y = A[0][4] * 100 + A[0][5] * 10 + A[0][6];
Z = A[0][7] * 100 + A[0][8] * 10 + A[0][9];
if (Z == X + Y && X < Y)
{
SUM++;
cout<<X<<"+"<<Y<<"="<< Z<<endl;
}
return; //如果没有return 程序会无休止的循环下去
}
for (i = 1;i < 10;i++)
{
if (!A[1][i]) //当此前的数字没有在函数中使用
{
A[0][step] = i;
A[1][i] = 1;
DFS(A, step + 1);
A[1][i] = 0;//使用过后记为0
}
}
return;
}
关于这个代码我为了让自己更好的理解就画了个图,运用二维数组第一行代表数字,第二行代表是否遍历