化妆品公司的网站建设策划书,深圳网站建设企,商标注册45类明细,做网站网站多久会被抓一、题目 题目描述#xff1a; 向一个空栈中依次存入正整数#xff0c; 假设入栈元素 n(1n2^31-1)按顺序依次为 nx…n4、 n3、n2、 n1, 每当元素入栈时#xff0c;如果 n1n2…ny(y 的范围[2,x]#xff0c;1x1000)#xff0c;则 n1~ny 全部元素出栈#x…一、题目 题目描述 向一个空栈中依次存入正整数 假设入栈元素 n(1n2^31-1)按顺序依次为 nx…n4、 n3、n2、 n1, 每当元素入栈时如果 n1n2…ny(y 的范围[2,x]1x1000)则 n1~ny 全部元素出栈重新入栈新元素 m(m2*n1)。 如依次向栈存入 6、 1、 2、 3, 当存入 6、 1、 2 时栈底至栈顶依次为[6、1、2]当存入 3时3213、2、1 全部出栈重新入栈元素 6(62*3)此时栈中有元素 6 因为 66所以两个 6 全部出栈存入 12最终栈中只剩一个元素 12。 二、输入输出 输入描述: 使用单个空格隔开的正整数的字符串如”5 6 7 8″左边的数字先入栈输入的正整数个数为 x1x1000。输出描述: 最终栈中存留的元素值元素值使用空格隔开如”8 7 6 5″ 栈顶数字在左边。 6 1 2 3 三、示例 示例 1 输入输出示例仅供调试后台判题数据一般不包含示例 输入 5 10 20 50 85 1 输出 1 170 说明 510205085 输入 85 时 5、 10、 20、 50、 85 全部出栈入栈 170最终依次出栈的数字为 1 和 170。 示例2 输入输出示例仅供调试后台判题数据一般不包含示例 输入 6 7 8 13 9 输出 9 13 8 7 6示例3 输入输出示例仅供调试后台判题数据一般不包含示例 输入 1 2 5 7 9 1 2 2 输出 4 1 9 14 1 四、解题思路 首先我们需要将输入的正整数字符串按空格分割成一个列表。然后我们可以使用一个栈来模拟入栈和出栈的过程。对于每个入栈的元素我们通过对栈内现有数据逐个进行逆向求和后进行判断是否应该进行入栈操作。如果满足出栈条件则将栈中的元素全部出栈并将新元素入栈。最后输出栈中剩余的元素栈顶元素在左边。 五、参考代码
# -*- coding: utf-8 -*-File : 2023-B-堆栈中的剩余数字.py
Time : 2023/12/16 03:18:39
Author : mgc
Version : 1.0
Desc : None
def calculate_final_stack(nums):stack []stack.append(nums[0])# len len(nums)for i in range(1, len(nums)):sum 0 for j in range(len(stack)-1,-1,-1): # 从i-1的位置开始逆向尔和sum sum stack[j]if sum nums[i]: # 如果和等于nums[i]删除旧数据入栈2倍的nums[i],并退出此循环del stack[j:len(stack)]stack.append(2 * nums[i])breakelif sum nums[i]: # 如果和小于nums[i]继续循环if j 0:stack.append(nums[i])else:continueelse: # 如果和大于nums[i]入栈nums[i]并退出此循环stack.append(nums[i])breakreturn stack[::-1]# 接收用户输入
nums input()
nums [int(i) for i in nums.split()]
result calculate_final_stack(nums)string_list [str(i) for i in result]
print( .join(string_list))