前言

今天给大家分享几道有关于三位数的拆分和重组的题目,难度循序渐进哦~

一、三位数拆分[修改]

题目

描述

输入一个3位数的自然数,依次输出这个数每位上的数字和三个数字的和。.

输入格式

一个三位数的自然数。

输出格式

两行。
第一行,以逗号分隔的三个数字(依次是百位、十位、个位)。
第二行,一个整数,表示三个数字之和。

样例

输入数据 1
123
输出数据 1
1,2,3
6

提示

  • print(a, b), 输出a、b的值,默认用空格分隔
  • print(a, b, sep = ","),  输出a、b的值,用逗号分隔。

分析

最基础的三位数拆分,用整除和取模来做即可。

代码

a=int(input())
b=a//100
c=a//10%10
d=a%100%10
e=b+c+d
print(b, c, d, sep = ",")
print(e)

二、三位数重组

题目

描述

输入一个三位正整数,拆分各数位上的数字后,重组成一个最大数和一个最小数,计算它们之间的差

输入格式

一个三位正整数

输出格式

最大三位数减去最小三位数的差

样例

输入数据 1
213
输出数据 1
198

提示

不要使用max,sort等函数

分析

其实就是在上题的基础上加上了一个重组的过程,因为题目要求不让用max函数,所以我们就老老实实if语句就行了。

代码

m = int(input())
a = m // 100
b = m % 100 // 10
c = m % 100 % 10
if a >= b and b >= c:
    print((a * 100 + b * 10 + c) - (c * 100 + b * 10 + a))
elif a >= c and c >= b:
    print((a * 100 + c * 10 + b) - (b * 100 + c * 10 + a))
elif b >= a and a >= c:
    print((b * 100 + a * 10 + c) - (c * 100 + a * 10 + b))
elif b >= c and c >= a:
    print((b * 100 + c * 10 + a) - (a * 100 + c * 10 + b))
elif c >= a and a >= b:
    print((c * 100 + a * 10 + b) - (b * 100 + a * 10 + c))
else:
    print((c * 100 + b * 10 + a) - (a * 100 + b * 10 + c))

三、黑洞数495

题目

描述

黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个各位数字不完全相同的整数,经有限“重排求差”操作,总会得到某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。

例如,任意一个各位数字不完全相同的三位数,如297,三个位上的数从小到大和从大到小各排一次得到972和279,相减得693。再按上面做法做一次得到594,再做一次得到495。之后反复都得到495,495即为三位黑洞数。

输入格式

任意一个各位数字不完全相同的三位数。

输出格式

该数经过N步得到黑洞数495,则输出N行,各行依次输出每步计算得到的数。

若无需计算,则输出0。

样例

输入数据 1
297
输出数据 1
693
594
495

提示

入门题

分析

这道题其实就是将上面的步骤都组合起来,但是此处用了max和min函数,会快很多,而且主要的区别就在于多了个while循环个人觉得没什么思维上的难度)。

代码

n = int(input())
if n != 495:
    while n != 495:
        a = n // 100
        b = n % 100 // 10
        c = n % 10
        d = max(a, b, c)
        e = min(a, b, c)
        f = a + b + c - d - e
        g = d * 100 + f * 10 + e
        h = e * 100 + f * 10 + d
        n = g - h
        print(n)
else:
    print(0)

更多推荐