大神求解!编程输入一个三位的正整数,该数的百位、十位、个位数互不相同且都不为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;
}
}
------解决方案--------------------
编程输入一个三位的正整数,该数的百位、十位、个位数互不相同且都不为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); } } }