PTA:Python解答1021 个位数统计/1022 D进制的A+B/1023 组个最小数

1021 个位数统计 (15分)

给定一个k位整数d_k-1*10^(k-1)+...+d_1*10^1+d_0(0≤d_i≤9, i=0, ..., k-1, d_k-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。

输入格式:

每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。

输出格式:

对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。

输入样例:

100311

输出样例:

0:2
1:3
3:1

解题思路:

运用字典的get方法,快速存入字典转换成列表排序。

完整代码:

n = input()
d = {}
for i in n:
    d[i] = d.get(i,0)+1
ls = list(d.items())
ls.sort(key= lambda x:int(x[0]), reverse = False)
for i in ls:
    print(i[0]+':'+str(i[1]))
1022 D进制的A+B (20分)

输入两个非负 10 进制整数 A 和 B (≤2^30​​ −1),输出 A+B 的 D (1<D≤10)进制数。

输入格式:

输入在一行中依次给出 3 个整数 A、B 和 D。

输出格式:

输出 A+B 的 D 进制数。

输入样例:

123 456 8

输出样例:

1103

解题思路:

用while循环计算进制即可。

完整代码:

n = input().split()
x = int(n[0]) + int(n[1])
rst = ''
a = x // int(n[2])
b = x % int(n[2])
rst = str(b) + rst
while a != 0:
    b = a % int(n[2])
    a = a // int(n[2])
    rst = str(b) + rst
print(rst)
1023 组个最小数 (20分)

给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。
现给定数字,请编写程序输出能够组成的最小的数。

输入格式:

输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。

输出格式:

在一行中输出能够组成的最小的数。

输入样例:

2 2 0 0 0 3 0 0 1 0

输出样例:

10015558

解题思路:

首先提取第一个不为0 的数,然后按照顺序打印即可。

完整代码:

n = input().split()
for i in range(1,10):
    if n[i] != '0':
        rst = str(i)
        n[i] = str(int(n[i]) - 1)
        break
for j in range(10):
    rst = rst + str(j) * int(n[j])
print(rst)
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注