最近更新的博客
华为OD机试 - 简易压缩算法(Python) | 机试题算法思路 【2023】
华为OD机试题 - 获取最大软件版本号(JavaScript)
华为OD机试 - 猜字谜(Python) | 机试题+算法思路 【2023】
华为OD机试 - 删除指定目录(Python) | 机试题算法思路 【2023】
华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】
使用说明
参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html
华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730
计算堆栈中的剩余数字
题目
向一个空栈中依次存入正整数
假设入栈元素N(1<=N<=2^31-1)
按顺序依次为Nx
… N4
、N3
、N2
、N1
,
当元素入栈时,如果N1=N2+...Ny
(y
的范围[2,x]
,1 <= x <= 1000
)
则 N1 到 Ny 全部元素出栈,重新入栈新元素M(M=2*N1)
如依次向栈存储6
、1
、2
、3
,当存储6
、1
、2
时
栈底至栈顶以此为[6、1、2]
:当存入3
时,3=2+1
,
3
、2
、1
全部出栈,重新入栈元素6
,(6=2*3)
此时栈中有元素6
因为6=6
,所有两个六全部出栈存入12
最终栈中只剩一个元素12
输入
使用单个空格隔开的正整数的字符串
如:5
6
7
8
,左边的数字先入栈
输入的正整数个数为x
1 <= x <= 1000
输出描述
最终栈中存留的元素值,元素值使用空格隔开,
如8
7
6
5
,栈顶数字在左边
示例一
输入
5 10 20 50 85 1
输出
1 170
说明
5+10+20+50=85
输入 85 时, 5、10、20、50、85 全部出栈
入栈 170
最终依次出栈的数字为 1 和 170
示例二
输入
6 7 8 13 9
输出
9 13 8 7 6
示例三
输入
1 2 5 7 9 1 2 2
输出
4 1 9 14 1
编码思路
对于给定的一组整数,将其中的一些整数加倍并删除某些整数,得到一个新的整数序列,使得新序列中相邻的两个整数之和不相等。程序通过从原序列的尾部开始输出新序列,将结果打印到标准输出流中。
核心知识点
无特殊知识点,可参考代码进行学习。
Python 代码实现
import sys
def solve_method(line):
strings = line.split()
list = [int(s) for s in strings]
is_change = True
while len(list) != 1 and is_change:
for i in range(1, len(list)):
n = i
num = list[i]
is_end = False
count = 0
while not is_end:
n -= 1
count += list[n]
if count == num:
if i >= n:
del list[n:i + 1]
list.insert(n, 2 * num)
is_change = True
break
if count > num or n == 0:
is_end = True
is_change = False
if is_change:
break
res = " ".join([str(n) for n in reversed(list)])
print(res, end='')
if __name__ == '__main__':
line = sys.stdin.readline().strip()
solve_method(line)
代码运行结果
5 10 20 50 85 1
1 170
版权说明
试题来源:华为 OD 联盟整理收集
题解:解题思路 与 代码 为原创内容,该部分版权由 OD 联盟共同拥有,并授权组内成员发布。
目标:👉 助你解开所有机试题
👇 全网 6000+人正在学习的 爬虫专栏 👇👇👇👇
- ⭐️ Python 爬虫 120,点击订购 ⭐️
- ⭐️ 爬虫 100 例教程,点击订购 ⭐️