#include<iostream>
using namespace std;
bool used[9]; //1到9使用情况,判断有没有使用
int count = 0; //满足结果的个数 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2
void Print(int, int);
void Add(int &,int , int);
void Store(bool *);
void Reset(bool *);
int main(int argc, char *argv[])
{
Print(0, 8);
cout << "count = " << count <<endl; //输出结果的个数
return true;
}
void Print(int num, int n)
{
int i;
int FirstNum;
bool store[9];
if(n >= 1)
{
for(i = 0; i < 9; i++)
{
if(!used[i])
{
Store(store);
FirstNum = num;
used[i] = true;
Add(num, i + 1, n);
Print(num, n - 1);
Reset(store);
num = FirstNum;
}
}
}
else if(n == 0)
{
for(i = 0; i < 9;)
{
if(used[i])
{
i++;
}
else if(!used[i])
{
num += i + 1;
// cout << num << endl; //将排列组合的结果输入到屏幕上,输出非常耗费时间
count++;
break;
}
}
}
}
void Add(int &num, int integer, int n)
{
int i;
for(i = 0; i < n; i++)
{
integer *= 10;
}
num += integer;
}
void Store(bool *store)
{
int i;
for(i = 0; i < 9; i++)
{
*store = used[i];
store++;
}
}
void Reset(bool *store)
{
int i;
for(i = 0; i < 9; i++)
{
used[i] = *store;
store++;
}
}