输入格式:一个三位数整数
输出格式:
序号: 数字重排后的最大数 - 重排后的最小数 = 差值
输入样例:
123
输出样例:
1: 321 - 123 = 198
2: 981 - 189 = 792
3: 972 - 279 = 693
4: 963 - 369 = 594
5: 954 - 459 = 495
解题思路:
do-while循环:{
1、分离数字num,存进数组里面;
2、冒泡升序排序数组load;
3、组建max和min,用到的两个小循环和数学幂函数,得到num值;
4、计数器加一;
5、按格式打印;
}//一定用do-while!
完整代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int num;
int cot = 0;//计数器
scanf("%d", &num);
int max;
int min;
//现冒泡排序,分开num的各位值
int i, j, k;
int load[3]={0};//记得初始化,三位数,反正也就三个位置够了
do//最外层循环,一定要用do——while循环,不然495的后台样例过不了
{
k= -1;//免得数组越界,从-1开始
while (num != 0)
{
k++;
load[k] = num % 10;
num /= 10;
}//分离各位值,存进数组里面
int temp;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3 - i - 1;j++)
{
if(load[j]>load[j+1])
{
//又是冒泡排序,升序
temp = load[j];
load[j] = load[j + 1];
load[j + 1] = temp;
}
}
}//排序结束
max = 0;
for (j = 0; j < 3;j++)
{
max += load[j] * pow(10, j);
}//组成最大值
min = 0;
for (j = 0; j < 3;j++)
{
min += load[j] * pow(10, 2 - j);
}//组成最小值
num = max - min;//新的num值
cot++;
printf("%d: %d - %d = %d\n", cot, max, min, num);
} while (num != 495 && num != 0);
return 0;
}
vs code执行结果如下:
希望我的代码对你有所帮助。