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