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)