栈数据合并——华为2023.5.10

本文介绍了如何根据特定规则对栈中的数据进行合并操作。当压入新的整数时,如果栈内存在数字之和等于新压入的数,它们会被移除并压入新值(新值为原数的两倍)。通过示例展示了该算法的应用,并给出了输入和输出的样例,阐述了时间与内存限制条件。
摘要由CSDN通过智能技术生成

题目描述

向一个空栈压入正整数,每当压入一个整数时,执行以下规则(设:栈顶至栈底整数依次编号为n1、n2…nx,n1为最新压入的整数)
1.如果n1=n2,则n1、n2全部出栈,压入新数据m(m=2×n1);
2.如果n1=n2+…+ny(y的范国为[3,x]) ,则n1、n2…ny全部出栈,压入新数据m(m=2×n1);
3.如果上述规则都不满足,则不做操作
如: 依次向栈压入6、1、2、3,当压入2时,栈顶至栈底依次为[2、1、6];当压入3时,3=2+1,3、2、1全部出栈,重新入栈整数6(此时n1=3,因此m=2×3=6),此时栈顶至栈底依次为[6、6];6=6,两个6全部出栈,压入12(此时n1=6,因此m=2×6=12),最终栈中只剩一个元素12.
向栈中输入一串数字,请输出应用此规则后栈中最终存留的数字
解答要求
时间限制: C/C++ 1000ms,其他语言: 2000ms
内存限制: C/C++ 256MB,其他语言: 512MB
输入
使用单个空格隔开的正整数的字符串,如"5 6 7 8”,左边数字先入栈。
使用单个空格隔开的正整数的字符串,如"5 6 7 8”,左边的数字先入栈。
正整数大小为[1,2^31-1]。
正整数个数为[1,1000]。
输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值