读书人

大神求解!编程输入一个三位的正整数

发布时间: 2012-05-21 18:04:41 作者: rapoo

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

读书人网 >C语言

热点推荐