@

1. 15.125GB

【问题描述】
在计算机存储中,15.125GB是多少MB?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

1KiB(Kilobyte)=1024B ,即2的10次方字节zd,读音“千字节”

1MiB(Megabyte)=1024KiB,即2的20次方字内节,读音“兆字节”

1GiB(Gigabyte)=1024MiB,即2的30次方字节,读音“吉字节”

1TiB(Terabyte)=1024GiB,即2的40次方字节容,读音“太字节”

1PiB(Petabyte)=1024TiB,即2的50次方字节,读音“拍字节”

1EiB(Exabyte) =1024PiB,即2的60次方字节,读音“艾字节”

1ZiB(Zettabyte)=1024EiB,即2的70次方字节,读音“Z字节”

1YiB(Yottabyte)=1024ZiB,即2的80次方字节,读音“Y字节

比特(bit)是最小的存储单位。

计算机存储单位一般用字节(Byte)、千字节(KB)、兆字节(MB)、吉字节(GB)、太字节(TB)、拍字节(PB)、艾字节(EB)、泽它字节(ZB,又称皆字节)、尧它字节(YB)表示。

capacity = 15.125 * 1024

print(capacity)

15488

2. 约数个数

【问题描述】
1200000有多少个约数(只计算正约数)。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

约数,又叫因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。在自然数(0和正整数)的范围内,任何正整数都是0的约数。4的正约数有:1、2、4。6的正约数有:1、2、3、6。10的正约数有:1、2、5、10。12的正约数有:1、2、3、41215的正约数有:1、3、5、15。18的正约数有:1、2、3、6、9、18。20的正约数有:1、2、4、5、10、20。注意:一个数的约数必然包括1及其本身。

count = 2  # 1 and itself

num = 1200000

for i in range(2, num):  # From 2 to num - 1
if num % i == 0:
count += 1
# print(i, end=' ') # Show all divisors print(count)

96

3. 叶结点数

【问题描述】
一棵包含有2019个结点的二叉树,最多包含多少个叶结点?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

最多叶子结点数就是求其对应的完全二叉树

然后求2019个结点的完全二叉树的叶子结点即可

def most_leaf_nodes(total):

    layer = 0

    while 2 ** layer - 1 < total:
layer += 1 now_layer = layer - 1 now_layer_nodes = 2 ** (layer - 2) now_total_nodes = 2 ** (layer - 1) - 1 left_nodes = total - now_total_nodes leaf_nodes = now_layer_nodes - (left_nodes // 2 + left_nodes % 2) + left_nodes return leaf_nodes print(most_leaf_nodes(2019))

1010

4. 数字9

【问题描述】
在1至2019中,有多少个数的数位中包含数字9?
注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算只是算一个数。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

数位分离

def is_contains_9(num):
"""It's four, no need to cycle.""" one = num % 10
ten = num // 10 % 10
hundred = num // 100 % 10
thousand = num // 1000 % 10
if 9 in [one, ten, hundred, thousand]:
return True
else:
return False ans = 0 given_number = 2019 for i in range(1, given_number + 1):
if is_contains_9(i):
# print(i, end=' ') # list all eligible numbers
ans += 1 print('\n', ans, sep='')

544

5. 数位递增的数

【问题描述】
一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。
给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
【输入格式】
输入的第一行包含一个整数 n。
【输出格式】
输出一行包含一个整数,表示答案。
【样例输入】
30
【样例输出】
26
【评测用例规模与约定】
对于 40% 的评测用例,1 <= n <= 1000。
对于 80% 的评测用例,1 <= n <= 100000。
对于所有评测用例,1 <= n <= 1000000。

dp动态规划

def dfs(pos, pre, limit):

    if pos == -1:  # 单独一位算一个
return 1 if not limit and dp[pos][pre] != -1: # 返回dp二维表中记录的值
return dp[pos][pre] up = a[pos] if limit else 9 ans = 0 for i in range(pre, up + 1):
ans += dfs(pos - 1, i, limit and i == a[pos]) if not limit: # 把算过的值记录在dp二维表中
dp[pos][pre] = ans return ans def solve(num):
k = 0
while num != 0:
a[k] = num % 10
k += 1
num = num // 10 return dfs(k - 1, 0, True) a = [0 for _ in range(10)] dp = [[-1 for _ in range(10)] for _ in range(11)] n = int(input()) print(solve(n) - 1) # print(a, dp, sep='\n')

当输入1000时,数组中数据记录

1000

219

[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]

[[10, 9, 8, 7, 6, 5, 4, 3, 2, 1],

[55, 45, 36, 28, 21, 15, 10, 6, 3, 1],

[220, -1, -1, -1, -1, -1, -1, -1, -1, -1],

[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],

[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],

[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],

[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],

[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],

[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],

[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],

[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]]

6. 递增三元组

【问题描述】
在数列 a[1], a[2], ..., a[n] 中,如果对于下标 i, j, k 满足 0<i<j<k<n+1 且 a[i]<a[j]<a[k],则称 a[i], a[j], a[k] 为一组递增三元组,a[j]为递增三元组的中心。
给定一个数列,请问数列中有多少个元素可能是递增三元组的中心。
【输入格式】
输入的第一行包含一个整数 n。
第二行包含 n 个整数 a[1], a[2], ..., a[n],相邻的整数间用空格分隔,表示给定的数列。
【输出格式】
输出一行包含一个整数,表示答案。
【样例输入】
5
1 2 5 3 5
【样例输出】
2
【样例说明】
a[2] 和 a[4] 可能是三元组的中心。
【评测用例规模与约定】
对于 50% 的评测用例,2 <= n <= 100,0 <= 数列中的数 <= 1000。
对于所有评测用例,2 <= n <= 1000,0 <= 数列中的数 <= 10000。

按顺序比大小,用过的中心入栈,之后就不能再用了

n = int(input())

arr = list(map(int, input().split()))

count = 0

data = []

for i in range(n):
for j in range(i + 1, n):
for k in range(j + 1, n):
if arr[i] < arr[j] < arr[k]:
if arr[j] not in data:
data.append(arr[j])
count += 1
# count += 1
# arr[j] = 0 print(count)

7. 音节判断

【问题描述】
小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。
给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。
元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
【输入格式】
输入一行,包含一个单词,单词中只包含小写英文字母。
【输出格式】
输出答案,或者为yes,或者为no。
【样例输入】
lanqiao
【样例输出】
yes
【样例输入】
world
【样例输出】
no
【评测用例规模与约定】
对于所有评测用例,单词中的字母个数不超过100。

这里直接列出了 也可以自己编一个判断函数

word = input()

vowel = ['a', 'e', 'i', 'o', 'u']

i = 0

ans = 0

if word[i] in vowel:
print('no')
else:
ans += 1
i += 1
while i < len(word):
if word[i] not in vowel:
i += 1
else:
ans += 1
# print(ans, i)
break while i < len(word):
if word[i] in vowel:
i += 1
else:
ans += 1
# print(ans, i)
break while i < len(word):
if word[i] not in vowel:
i += 1
else:
ans += 1
# print(ans, i)
break while i < len(word):
if word[i] in vowel:
i += 1
else:
ans += 1
break if ans == 4:
print('yes')
else:
print('no')

8. 长草

【问题描述】
小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。
小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。
这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。
请告诉小明,k 个月后空地上哪些地方有草。
【输入格式】
输入的第一行包含两个整数 n, m。
接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为 g,表示种了草。
接下来包含一个整数 k。
【输出格式】
输出 n 行,每行包含 m 个字母,表示 k 个月后空地的状态。如果为小数点,表示为空地,如果字母为 g,表示长了草。
【样例输入】
4 5
.g...
.....
..g..
.....
2
【样例输出】
gggg.
gggg.
ggggg
.ggg.
【评测用例规模与约定】
对于 30% 的评测用例,2 <= n, m <= 20。
对于 70% 的评测用例,2 <= n, m <= 100。
对于所有评测用例,2 <= n, m <= 1000,1 <= k <= 1000。

输出二位列表元素

for i in range(n):

print(arr[i], sep='')

输出一维列表元素

print(
arr, sep='')

此处arr为一维数组

def grow_grass(x, y):
for q in range(4):
tx = x + next_[q][0]
ty = y + next_[q][1]
if tx >= 0 and tx < n and ty >= 0 and ty < m: # 不能越界
if arr[tx][ty] == '.': # 如果本来就有草,则不动,无草,才长
arr[tx][ty] = 'g'
flag[tx][ty] = 1 n, m = map(int, input().split()) arr = [list(input()) for _ in range(n)] flag = [[0 for _ in range(m)] for _ in range(n)] next_ = [[-1, 0], [1, 0], [0, -1], [0, 1]] # 用来表示(x, y)的上下左右四个位置 k = int(input())
# print(arr)
# exit()
for i in range(k):
flag = [[0 for _ in range(m)] for _ in range(n)]
for j in range(n):
for p in range(m):
if arr[j][p] == 'g' and flag[j][p] == 0:
# print(j, p)
flag[j][p] = 1
grow_grass(j, p) for i in range(n):
print(*arr[i], sep='') # print(arr) # print(flag)

9. 序列计数

【问题描述】
小明想知道,满足以下条件的正整数序列的数量:
1. 第一项为 n;
2. 第二项不超过 n;
3. 从第三项开始,每一项小于前两项的差的绝对值。
请计算,对于给定的 n,有多少种满足条件的序列。
【输入格式】
输入一行包含一个整数 n。
【输出格式】
输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。
【样例输入】
4
【样例输出】
7
【样例说明】
以下是满足条件的序列:
4 1
4 1 1
4 1 2
4 2
4 2 1
4 3
4 4
【评测用例规模与约定】
对于 20% 的评测用例,1 <= n <= 5;
对于 50% 的评测用例,1 <= n <= 10;
对于 80% 的评测用例,1 <= n <= 100;
对于所有评测用例,1 <= n <= 1000。

有难度

解释在代码注释中

def next_item(res):
res_ = []
size = len(res)
ab = abs(res[size - 1] - res[size - 2])
if ab <= 1:
return None
for i in range(1, ab):
new_res = []
new_res += res
new_res.append(i)
res_.append(new_res) return res_ MOD = 10000 n = int(input()) res_list = [] temp_list = [] accept_list = [] for i in range(1, n + 1):
res = [n, i] # 两项时的情况
res_list.append(res) # 把所有两项情况加入res_list记录 temp_list += res_list # 把res_list记录进temp_list while len(temp_list) > 0:
for i in range(len(temp_list)): # 判断temp_list的每一项
next_ = next_item(temp_list[i]) # 判断这项可以再派生下一项
# print(next_)
if next_ is not None: # 如果可以派生下一项,添加记录到accept_list
accept_list += next_ temp_list.clear() # 清空 if len(accept_list) != 0:
# print(accept_list)
# print(res_list)
res_list = accept_list + res_list # 把新派生出的项加到res_list,res_list此时已包含两项加新派生的项
# print(res_list)
temp_list += accept_list # 新派生的项加到temp_list进行下次循环用
accept_list.clear() # print(res_list) # 循环结束后,此时所有满足条件的项都在res_list中 print(len(res_list) % MOD)

10. 晚会节目单

【问题描述】
小明要组织一台晚会,总共准备了 n 个节目。然后晚会的时间有限,他只能最终选择其中的 m 个节目。
这 n 个节目是按照小明设想的顺序给定的,顺序不能改变。
小明发现,观众对于晚上的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第一个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推。
小明给每个节目定义了一个好看值,请你帮助小明选择出 m 个节目,满足他的要求。
【输入格式】
输入的第一行包含两个整数 n, m ,表示节目的数量和要选择的数量。
第二行包含 n 个整数,依次为每个节目的好看值。
【输出格式】
输出一行包含 m 个整数,为选出的节目的好看值。
【样例输入】
5 3
3 1 2 5 4
【样例输出】
3 5 4
【样例说明】
选择了第1, 4, 5个节目。
【评测用例规模与约定】
对于 30% 的评测用例,1 <= n <= 20;
对于 60% 的评测用例,1 <= n <= 100;
对于所有评测用例,1 <= n <= 100000,0 <= 节目的好看值 <= 100000。

尽可能的好看,表示贪心

每次开始选的时候都要选可选择的值中的表示最好看的值

第一次选只能从前n - m 个中选择

之后则从选出的值对应的索引序号后开始到n - m + count中选

选出的值放入items列表中

当items列表长度小于n - m时开始循环

选满m个值后结束循环

提示:

输出列表直接元素,不带两侧的列表符号

print(*items)

下面这样输出的会带列表符号

print(items)

n, m = map(int, input().split())

count = 1

values = list(map(int, input().split()))

items = [max(values[:n - m + 1])]

max_i = values.index(items[0])

while len(items) < m:
items.append(max(values[max_i + 1:n-m+count+1]))
max_i = values.index(items[count])
count += 1 print(*items)

找了两组测试数据

Example 1:

8 5

1 2 3 5 7 8 10 9

5 7 8 9 10

Example 2:

9 4

1 2 8 5 7 6 3 9 4

8 7 9 4

最新文章

  1. vmware mysql报kernel: EXT4-fs (dm-0): Unaligned AIO/DIO on inode 1055943 by mysqld; performance will be poor
  2. 替换文件最后一行中的所有e 为 E
  3. HDU 3492 (直线与所有线段相交) Segment
  4. Serializable 序列化为文件
  5. asp.net上传文件并创建文件夹和删除文件
  6. hdu 2186
  7. HDU 3473 Minimum Sum (划分树)
  8. javaWeb学习总结(11)- 监听器(Listener)学习(2)
  9. 【爆料】-《昆士兰大学毕业证书》Queensland一模一样原件
  10. 整合MVC实现文件上传
  11. Linux用过的命令集合
  12. es6学习日记5-对象的扩展
  13. smb文件共享实现
  14. 在centos中安装jenkins master为service
  15. 《网络对抗》拓展:注入shellcode
  16. Flask初级(八)flash与前台交互get post 简介
  17. 【C语言天天练(十三)】printf、fprintf、sprintf和snprintf函数
  18. 解决运行github项目build时间长问题
  19. 迷你MVVM框架 avalonjs 1.3.3发布
  20. SSM整合CRUD操作(一)

热门文章

  1. 分治算法(二分查找)、STL函数库的应用第五弹——二分函数
  2. 【算法•日更•第三十一期】KMP算法
  3. python 去除Excel中的重复行数据
  4. linux 安装sftp
  5. VUE 中引入百度地图(vue-Baidu-Map)
  6. Hadoop 2.6.1 集群安装配置教程
  7. CF1270B Interesting Subarray 题解
  8. mysql8.0的下载、安装、可视化软件(下载、安装、破解)
  9. Android Studio相关目录
  10. PyCharm切换解释器版本