C语言经典例题———PTA黑洞数

 

输入格式:一个三位数整数

输出格式:

序号: 数字重排后的最大数 - 重排后的最小数 = 差值

 输入样例:

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执行结果如下:

 

希望我的代码对你有所帮助。 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值