大神求解!编程输入一个三位的正整数,该数的百位、十位、个位数互不相同且都不为0,将它们任意排列后可组成6个数,按从大到小的顺序输出这6个数。该如何解决

大神求解!!编程输入一个三位的正整数,该数的百位、十位、个位数互不相同且都不为0,将它们任意排列后可组成6个数,按从大到小的顺序输出这6个数。
编程输入一个三位的正整数,该数的百位、十位、个位数互不相同且都不为0,将它们任意排列后可组成6个数,按从大到小的顺序输出这6个数。
例如:
输入:396
输出:963 936 693 639 396 369


------解决方案--------------------
伪代码:

int get(int input)
{
//判断是否是3位数
if(input/10000>0) return 1;
else
{
//将这个3位数的个位、十位、百位求出,放入数组bit[3]中
int bit[3];
bit[0] = input / 100;
bit[1] = input / 10 % 10;
bit[2] = input % 10;
//判断是否有0
if( bit[0] && bit[1] && bit[2]) return 2;
//判断是否有两数相同
if( bit[0] == bit[1] || bit[1] == bit[2] || bit[2] == bit[0]) return 3;
//排序
int max,min,middle;
max = hundred > ten ? hundred : ten;
min = hundred < ten ? hundred : ten;
max = max > bit ? max : bit;
min = min < ten ? min : bit;
for (int i = 0;i < 3;i++)
{
if(bit[i] != max && bit[i] != min) 
{
middle = bit[i];
break;
}
}
int output[6];//输出的6个三位数,从大到小排序
output[0] = max*100 + middle*10 +min;
output[1] = max*100 + min*10 +middle;
output[2] = middle*100 + max*10 + min;
output[3] = middle*100 + min*10 +middle;
output[4] = min*100 +max*10 + middle;
output[5] = min*100 + middle*10 +max;
}
}
------解决方案--------------------
C/C++ code

int nDigit;
int szComposit[3] = { 0 };// 3个数值
int szDigitArray[6] = { 0 };  // 6个组合
cin >> nDigit;
int i;
for (i = 0; i >= 3; i --)
{
   szComposit[i] = nDigit % 10;
   nDigit /= 10;
}

// 回溯3!种组合, 回溯3层,从0层开始, 这里最好初始化一下全局变量 j。 
BackTrace(szComposit, szDigitArray, 0, 3);
// 排列并打印。
略

// 回溯函数
static int j = 0; // 组合数的数量, 全局变量
void BackTrace(int* pComposit, int* pDigitArray, int nCurLevel, int nStopLevel)
{
   if(nCurLevel >= nStopLevel)
   {
       j ++; // 组合数的数量
   }
   else
   {
      for(int i = nCurLevel; i <= nStopLevel; i ++)
      {
         pDigitArray[j] *= 10;
         pDigitArray[j] += pComposit[i];  // 加上当前的组合数
  
         // 递归
         BackTrace(pComposit, pDigitArray, nCurLevel + 1, nStopLevel); 
      }
   }
}