向一个空栈中依次存入正整数,假设入栈元素 n(1<=n<=231−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,所以两个 6 全部出栈,存入 12,最终栈中只剩一个元素 12。
这个题目要求我们模拟一个栈的操作,将一系列正整数依次入栈。每当新元素入栈时,如果这个元素等于栈中某个连续子序列的和(子序列长度在 2 到 x 之间),则出栈这些元素,并将 m
(等于 2 * n_1
,其中 n_1
是当前入栈元素)入栈。最终,输出栈中剩余元素的值,栈顶元素在左侧,用空格隔开。输入为正整数的字符串,数字之间用空格分隔,数量范围为 1 到 1000。
数据范围只有1000直接用vector模拟入栈出栈的过程即可,注意可能会出现连续出栈的情况所以要递归实现。