1 条题解

  • 0
    @ 2025-8-24 21:15:36

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 洛谷网校
    欢迎大家报名洛谷网校的课程,期待和大家一起进步!https://class.luogu.com.cn

    搬运于2025-08-24 21:15:35,当前版本为作者最后更新于2024-02-23 15:51:34,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    欢迎大家报名洛谷网校的课程,期待和大家一起进步!

    思路分析

    题干要求将三位数的三个数字进行重新排列,所以我们可以借助数组 aa 来完成: int a[3]。最外层我们使用 while 语句来判断当前得到的数是否等于 495495,如果不是的话,我们需要再次进行操作,其中使用 ansans 来记录变换次数。

    我们需要先对这个三位数 NN 进行一些处理:把他的个位,十位,百位存放在数组 aa 中,并完成排序。此时最小的数存放在 a[0]a[0] ,最大的数存放在 a[2]a[2] 中,他们能组成的最大数与最小数的差的计算公式为 $a[2] \times 100+a[1]\times10+a[0]-(a[0] \times 100+a[1] \times 10+a[2])$,并将结果作为新的 NN 进行判断。

    核心代码

    最外层循环,变换次数记录:

    while(n!=495){
            ...
            cnt++;
    }
    
    

    NN 的个位,十位,百位分别存放在数组 aa 中:

    for (int i = 0; i < 3; i++)
    {
    	a[i] = n % 10;
       	n /= 10;
    }
    

    排序,求出得到的最大的数,减去得到的最小的数,得到新的数。

    sort(a, a + 3);
    n = (a[2] * 100 + a[1] * 10 + a[0]) - (a[0] * 100 + a[1] * 10 + a[2]);
    
    • 1

    信息

    ID
    9414
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者